2015-08-21 55 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)) 
} 

它最终取决于您的应用程序的范围。