2015-08-21 90 views
0

我在問自己,如果我以正確的方式做事情。這是我所關心的:Laravel:功能模型

我有這樣

class User extends Model { 

public function activities() 
{ 
    return $this->hasMany('App\Activity'); 
} 

.... 

public function getTotalDistanceTraveled() { 
    return Step::join('activities', 'activity_id', '=', 'activities.id')->where('activities.user_id', $this->id)->sum('steps.km'); 
} 

我的用戶模型,它把像getTotalDistanceTraveled()函數在用戶模型正確的地方?或者它應該在Controller中生成View?或者我必須創建一個UserRepository?

感謝您的推薦

+0

它應該在另一個模型,然後與他們建立關係 – aldrin27

+0

還有一個活動模型和一個步驟模型相關在一起。我想要的是獲得用戶行進的所有步驟的總距離。你建議使用哪種模式來實現這個功能? – bidou88

+0

我明白了。現在把它放在你的控制器中以獲得返回的對象 – aldrin27

回答

2

對我來說這取決於應用程序的大小。如果這是一個簡單的應用程序,將需要很少的維護和基本雄辯的查詢,那麼確保將它們保持在模型中 - 在小應用程序中困擾自己有什麼意義?

如果您的應用程序將不斷維護並且體積很大,那麼我會導致一個存儲庫設計,這樣您可以保持一切組織,維護更容易,並且與您自己在項目上工作的其他人可以找到他們的方式比較容易。

個人在一個大型應用程序中,我喜歡擁有存儲庫,但將更高級的複雜查詢分解爲每個查詢的專用類並將其從存儲庫中刪除。這對我來說更容易維護。

控制器明智,我個人更喜歡保持我的控制器'瘦'。但簡單的Eloquent查詢不會損害任何東西,例如:

public function view($id) 
{ 
    return view('view-user')->with('user', User::find($id)) 
} 

它最終取決於您的應用程序的範圍。