【问题标题】:Laravel 4: Where Clause in Model or in Controller?Laravel 4:模型或控制器中的 Where 子句?
【发布时间】: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 方式”是什么?假设我想返回 sitsupcomingSits,它被某个“开始”日期或“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


【解决方案1】:

你可以这样做:

$user = User::with('kids', 'groups', 'sits')->find($user_id)->toArray();
$sits = Sit::where(.....)->get()->toArray(); 

return Response::json(array(
    'user' => $user,
    'sits' => $sits
));

【讨论】:

    猜你喜欢
    • 2023-01-24
    • 2016-02-09
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2013-10-12
    • 2013-07-05
    相关资源
    最近更新 更多