Laravel 4 Eager Loading约束

时间:2015-01-21 11:57:29

标签: laravel-4 eloquent constraints eager-loading

如果评论user_id = $ id,我希望获得所有项目(主题)及其评论。我尝试这样的东西,但它不起作用。因此,如果Item没有得到user_id = $ id的评论,那么我就不需要这个项目了。

在DiscussionsItem模型中我有方法:

public function discussionsComments() {

    return $this->hasMany('DiscussionsComment', 'discussionsitem_id');
}

我在控制器中的查询是这样的:

    $items = DiscussionsItem::whereBrandId($brand_id)
        ->whereBrandCountryId($country_id)
        ->with(['discussionsComments' => function($query) use ($id) {
            $query->where('user_id', '=', $id);
        }])
        ->whereHas('discussionsComments', function($query) use ($id) {
            $query->where('user_id', '=', $id);
        })
        ->with(['views' => function($query) use ($id) {
            $query->where('user_id', $id)->count();
        }])
        ->orderBy('created_at', 'DESC')->get();

我的问题是我收到了带注释的项目,其中注释为user_id!= $ id。

P.S。我需要收集5条评论,但我无法想象如何做到这一点,因为 - >在我急切的负载中采取(5)是行不通的。

我想通了(工作代码):

    $items = DiscussionsItem::whereBrandId($brand_id)
        ->whereBrandCountryId($country_id)
        ->whereHas('discussionsComments', function($query) use ($id) {
            $query->where('user_id', '=', $id);
        })
        ->with(['views' => function($query) use ($id) {
            $query->where('user_id', $id)->count();
        }])
        ->orderBy('created_at', 'DESC')->get();


    $items->each(function($topic) use ($id, 5){
        $topic->comments = $topic->discussionsComments()->where('user_id', '=', $id)->get()->take(5);
    });

1 个答案:

答案 0 :(得分:0)

您可以执行自定义范围,或仅限制关系返回的金额:

public function discussionsComments() {
    return $this->hasMany('DiscussionsComment', 'discussionsitem_id')
        ->latest()
        ->take(5);
 }