Laravel,急切的装载不起作用

时间:2014-09-25 20:09:33

标签: php laravel eloquent

我试图获得"评论"从我的用户来自MX的数据库(例如)所以,我有这个:

Review::with(array('user' => function($query)
{
    $query->where('country_code', '=', 'MX');
}))
->with('user.country','pictures')
->where('shop_id',Input::get('id'))
->orderBy('id','DESC'))
->get()
->toArray()

但似乎在哪里(' country_code',' =',' MX')未被考虑在内因为检索所有评论,我只想要用户从MX写的评论。

    中的用户图片 >是我的用户模型中的功能
  • country_code是来自用户表的字段

目标是:只需获得指定国家/地区用户撰写的评论,并进行以下测试:

Review::where('shop_id',Input::get('id'))
->with('user.country','pictures')
->where('users.country_code','MX')
->orderBy('id','DESC'))
->get()
->toArray()

但是效果不好因为说:Unknow列users.country_code在哪里......

2 个答案:

答案 0 :(得分:0)

您想要执行基于关系过滤的查询。急切加载约束仅限制主结果集附带的记录。

Review::whereHas('users', function ($q)
{
    $q->where('country_code', 'MX');
})
->with('user','pictures')
->where('shop_id',Input::get('id'))
->orderBy('id','DESC'))
->get();

whereHas说...只给我一个有country_code=MX用户的评论。

<强>参考

Laravel Docs - Eloquent - Querying Relations

答案 1 :(得分:0)

如果您想要某个用户或一组用户撰写的评论,您不想使用预先加载。试试这个:

Review::with(array('user', 'pictures'))
    ->join('users', 'reviews.user_id', '=', 'users.id)
    ->where('users.country_code', '=', 'MX')
    ->where('reviews.shop_id', Input::get('id'))
    ->orderBy('reviews.id', 'DESC'))
    ->get();