Отношения HasManyThrough включает в себя Pivot - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть Модуль , Вопрос и Категория модель.

Module hasMany Questions. (1 to Many)
Question belongsToMany Categories. (Many to Many)

Для данного модуля я хотел бы получить доступ только к Вопросам , где category_id = X .

Я не уверен, что это самый эффективный способ сделать это. Могу ли я сделать это через отношение HasManyThrough между модулем и категорией? Или я должен создать цикл? Или сделать это с помощью необработанного SQL-запроса?

Обновление

Кажется, этот SQL-запрос работает. Тем не менее, я уверен, что должно быть более элегантное решение?

SELECT id
FROM questions
INNER JOIN category_question ON questions.id = category_question.question_id 
WHERE category_question.category_id = X and module_id = Y;

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018
Question::with(['model','categories'=>function($query){
    return $query->where('category_question.category_id',$category_id);
}])->get();

надеюсь, что это работает.

0 голосов
/ 07 сентября 2018

Вы можете достичь этого, используя

 Question::with(['module','categories'])
   ->join('category_question','category_question.question_id','=','question.id')
   ->where('category_question.category_id','=','X')
   ->where('questions.module_id','=','module_id')->get();
...