2014-12-17 1 views
0

У меня есть запрос базы данных с несколькими операциями «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 .* from topics inner join blogs on topics . blog_id = blogs . id inner join blog_subscriptions as us on us . blog_id = blogs . id and us . user_id = 1 where rating > 1 limit 2 offset 0)

+0

Try 'topics.rating' вместо' rating' – lukasgeiter

+0

он работал отлично. Спасибо. Мне кажется, что я должен углубить свои знания SQL, а не Eloquent? – naneri

+0

Ну, я не могу обидеть и то, и другое. В этом случае это было главным образом правильное чтение сообщения об ошибке. Я напишу полный ответ, чтобы вы могли принять его. – lukasgeiter

ответ

0

Как сказано в сообщении об ошибке colu mn rating неоднозначно. Значение SQL не может определить, какой столбец вы имеете в виду, потому что в вашем соединении может быть еще один, который называется rating.

В этой ситуации это помогает уточнить, в какой таблице находится поле. Это просто сделать, используя синтаксис [table].[field]

where('topics.rating', '>', 1) 
Смежные вопросы