2016-03-09 3 views
1

Привет моя структура базы данных выглядит следующим образом:Выберите определенное количество случайных строк из базы данных после соединения таблиц - Laravel 5,1

Таблица: статьи

id | category_id(fk) | title | description | image 

Таблица Категории

id | name 

Таблица: domain_category

id | domain_id(fk) | category_id(fk) 

Теперь сверху таблицы. Мне нужно только 8 случайных строк из таблицыстатьи где Domain_ID = $ dynamic_domain_id

То, что я попытался это следующим образом:

$randomArticles = Article::select("articles.*") 
         ->join('categories', 'categories.id', '=', 'articles.category_id') 
         ->join('domain_category', 'domain_category.category_id', 'categories.id') 
         ->where('domain_category.domain_id', $domain->lander_domain_id) 
         ->orderBy(DB::raw('RAND()'))->take(8)->get(); 

Но я получаю сообщение об ошибке, а не получать правильный результат. Заранее спасибо.

+0

... и какова ошибка, которую вы получаете? –

+0

SQLSTATE [42000]: Ошибка синтаксиса или нарушение доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'categories.id '' где 'domain_category'.'domain_id' =? order by RAND() asc lim 'в строке 1 (SQL: выберите 'articles'. * из' articles' inner join 'categories' на' categories'.'id' = 'articles'.'category_id' left join' domain_category' on 'domain_category'.'category_id' categories.id' 'where' domain_category'.'domain_id' = 5 order by RAND() asc limit 5) – Siddharth

ответ

2

Единственная синтаксическая ошибка, которая возникает у меня, заключается в том, что в вашем втором вызове функции join() отсутствует параметр '='. Попробуйте использовать этот запрос вместо:

$randomArticles = Article::select("articles.*") 
         ->join('categories', 'categories.id', '=', 'articles.category_id') 
         ->join('domain_category', 'domain_category.category_id', '=', 'categories.id') 
         ->where('domain_category.domain_id', $domain->lander_domain_id) 
         ->orderBy(DB::raw('RAND()'))->take(8)->get(); 
+1

Отлично :) Это сработало, и да, я только что заметил это. Спасибо, друг за помощь. – Siddharth

Смежные вопросы