我的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}} =topics
。blog_id
内部加入blogs
为id
blog_subscriptions
。us
= {{1} }。us
和blog_id
。blogs
= 1其中id
> 1限制2偏移0)
答案 0 :(得分:0)
正如错误消息所示,列rating
不明确。这意味着SQL无法分辨您的意思,因为您的联接中可能还有另一个列也被命名为rating
。
在这种情况下,有助于澄清该字段在哪个表中。这只需使用[table].[field]
语法
where('topics.rating', '>', 1)