嵌套json数据中的WHERE子句Laravel 5

时间:2016-07-20 02:59:48

标签: php json laravel laravel-5

作为我上一篇post中的后续问题,当您拥有嵌套的WHERE数据时,我无法弄清楚如何使用json子句。请参阅我的上一篇post作为对此的参考。

所以,我在模型中使用关系生成了这种数据:

[
  {
     "id":1,
     "name":"South Luzon",
     "branches":[
        {
           "id":1,
           "machinenum":108,
           "name":"Alaminos",
           "region_id":1,
           "user":{
              "id":52,
              "name":"",
              "email":"baic@alaminosbranch.addessacorp",
              "role":0,
              "machinenum":108,
              "created_at":"2016-07-11 05:58:04",
              "updated_at":"2016-07-14 09:49:00",
              "pendings":[
                 {
                    "id":10,
                    "user_id":52,
                    "region":"South Luzon",
                    "branch":"Alaminos",
                    "docdate":"2016-07-14 00:00:00",
                    "ls_or":12345,
                    "por":1,
                    "ls_ci":12345,
                    "ci":2,
                    "ls_ch":12345,
                    "ch":2,
                    "dep":5,
                    "cla":0,
                    "grpo":3,
                    "si":25,
                    "so":62,
                    "sts":2,
                    "disb":3,
                    "arcm":5,
                    "apcm":65,
                    "pint":2,
                    "rc_cash":1,
                    "reason":"Test Reason Alaminos",
                    "created_at":"2016-07-14 09:48:55",
                    "updated_at":"2016-07-14 09:48:55"
                 }
              ]
           }
        }

我要做的是将所有regionsbranches一起循环,然后获取每个分支的pending。我用我的上一个SO question成功完成了循环。现在,我只想过滤创建pending的日期。

我试图这样做:

$regions = Region::with(array('branches->user->pendings' => function($query) {
    $query->where('created_at', '=', '2016-07-14 09:48:55');
}))->get();

但是我收到了这个错误:

BadMethodCallException in Builder.php line 2345:
Call to undefined method Illuminate\Database\Query\Builder::branches->user->pendings()

我也做了一些研究,但最后还是问这里。提前致谢,请不要忘记查看我的上一个SO question作为参考。

3 个答案:

答案 0 :(得分:0)

$regions = App\Region::with(['pendings' => function ($query) {
    $query->where('created_at', '=', '2016-07-14 09:48:55');

}])->get();

答案 1 :(得分:0)

在json中输出关系之前,你不能先在关系上执行此操作吗?您可以在那里构建此查询,以便json输出将是干净的。您之前的帖子有一个答案,可能会引导您找到解决方案。

答案 2 :(得分:0)

此代码似乎有效:

$regions = Region::with(['branches.user.pendings' => function($query){
    $query->where('created_at', 'like', '%2016-07-12%');
}])->get();

请确认这是最佳做法还是更好的方法。