如何使用具有Eloquent ORM的多个表的多个'where'子句?

时间:2014-12-17 09:23:52

标签: laravel eloquent

我的Laravel应用程序中有一个包含多个'JOIN'语句的数据库查询,但我不知道如何正确添加where子句。

这是我的功能:

    return Topic::join('blogs', 'topics.blog_id', '=', 'blogs.id')
            ->join('blog_subscriptions as us', function ($j) use ($userId){
                  $j->on('us.blog_id', '=', 'blogs.id')
                    ->where('us.user_id', '=', $userId);
            })
            ->take(Config::get('topic.topics_per_page'))
            ->offset($offset)
            ->get(['topics.*']);

我想在'topics'表中添加'where'子句 - 所以我在“Topic ::”之后添加一行('rating','>',1),所以代码是像这样:

Topic::where('rating', '>', 1)
            ->join('blogs', 'topics.blog_id', '=', 'blogs.id')
            ->join('blog_subscriptions as us', function ($j) use ($userId){
                $j->on('us.blog_id', '=', 'blogs.id')
                ->where('us.user_id', '=', $userId);
            })
            ->take(Config::get('topic.topics_per_page'))
            ->offset($offset)
            ->get(['topics.*']);

但它只会导致错误:

  

SQLSTATE [23000]:完整性约束违规:1052 where子句中的列'rating'不明确(SQL:从topics内部联接topics选择blogs。* {{1 } {。{1}} = topicsblog_id内部加入blogsid blog_subscriptionsus = {{1} }。usblog_idblogs = 1其中id> 1限制2偏移0)

1 个答案:

答案 0 :(得分:0)

正如错误消息所示,列rating不明确。这意味着SQL无法分辨您的意思,因为您的联接中可能还有另一个列也被命名为rating

在这种情况下,有助于澄清该字段在哪个表中。这只需使用[table].[field]语法

即可完成
where('topics.rating', '>', 1)