【发布时间】:2014-02-06 03:11:56
【问题描述】:
我有以下表格:
users
- id
- username
kids
- id
- user_id
groups
- id
group_user
- id
- group_id
- user_id
sits
- id
- user_id
他们当然有 addl 字段,但这只是无关信息。
我的用户模型包含:
public function kids()
{
return $this->hasMany('Kid');
}
public function sits()
{
return $this->hasMany('Sit');
}
public function groups()
{
return $this->belongsToMany('Group')->withPivot('status');
}
我的 UserController@show 方法如下所示:
public function show($user)
{
$user = User::find($user)->load('kids', 'groups', 'sits');
return $user;
}
所以,当我点击 /user/show/1 时,我得到了我期望的 JSON。
{
"id": "1",
"username": "somename",
"email": "somename@example.com",
"kids": [
{
"id": "4",
"user_id": "1"
},
{
"id": "3",
"user_id": "1"
},
{
"id": "1",
"user_id": "1"
}
],
"groups": [
{
"id": "1",
"name": "Group Name",
"pivot": {
"user_id": "1",
"group_id": "1"
}
}
],
"sits": [
{
"id": "2",
"user_id": "1",
"start": "2014-01-16 00:00:31",
"end": "2014-01-16 00:00:31",
"sitter_id": "2"
}
]
}
但我的问题是,将另一个对象添加到过滤后的响应中的“Laravel 方式”是什么?假设我想返回 sits 和 upcomingSits,它被某个“开始”日期或“sitter_id”=0 过滤。
这种逻辑的正确 MVC 方法在哪里?我将如何使用 Laravel 在此响应中返回它?
【问题讨论】:
-
我自己只是在阅读有关此问题的最佳方法:Some tips for laravel newbies(特别是标题为
Your ORM is not your model的部分) -
谢谢,马克。是的,ORM 不是你的模型有一些好的想法。但是,我仍然不清楚。我可以在我的 js 模板中执行逻辑,因为我有我需要的一切;似乎有更好的方法。
-
使用存储库接口而不是直接绑定控制器,ORM 似乎在 Laravel 社区中的一些人中很受欢迎 - 可以帮助测试,并允许更轻松地更换持久性基础设施如果您愿意,可以在以后的日期 - 作为本测试教程的一部分,此方法有一个相当简单的介绍 - net.tutsplus.com/tutorials/php/testing-laravel-controllers - 所以答案可能是模型或控制器中没有“where”子句 - 取决于应用的大小和复杂性 :)
标签: php sql laravel laravel-4 eloquent