У меня есть запрос базы данных с несколькими операциями «JOIN» в моем приложении Laravel, но я не знаю, как правильно добавить в него предложение where.Как использовать несколько предложений 'where' с несколькими таблицами с Eloquent ORM?
Вот моя функция:
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.*']);
Я хотел бы добавить «где» положение в таблице «темы» - так я добавить строку, где («рейтинг», «>», 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]: Integrity constraint violation: 1052 Column 'rating' in where clause is ambiguous (SQL: select
topics
.* fromtopics
inner joinblogs
ontopics
.blog_id
=blogs
.id
inner joinblog_subscriptions
asus
onus
.blog_id
=blogs
.id
andus
.user_id
= 1 whererating
> 1 limit 2 offset 0)
Try 'topics.rating' вместо' rating' – lukasgeiter
он работал отлично. Спасибо. Мне кажется, что я должен углубить свои знания SQL, а не Eloquent? – naneri
Ну, я не могу обидеть и то, и другое. В этом случае это было главным образом правильное чтение сообщения об ошибке. Я напишу полный ответ, чтобы вы могли принять его. – lukasgeiter