У меня есть модель с таблицей отношений и сводной таблицей.
Книги
имя пользователя
1 книга 1
2 книга 2
3 книга 3
Типы
имя
1 художественная литература
2 научная литература
3 журнала
4 переплета
5 журнала
6 комедии
BookwithType
book_id type_id
1 2
1 3
2 2
2 4
Как вы можете видеть, книга может иметь более одного типа, теперь я хочу выполнить запрос для поиска всех типов книг, которые могут быть получены на основе пользовательского ввода. например, если пользователь ищет книгу в неигровом журнале, я бы хотел, чтобы была возвращена книга 1.
в тот момент, когда мой код возвращает как книги 1, так и 2 - потому что книга 2 - это не фантастическая книга, однако она не должен возвращаться, если оба условия не выполняются.
текущий код
$search = ['nonfiction','magazine'];
$books = Book::whereHas('types', $filter = function($query) use ($search){$query->whereIn('name',$search);
})
->get();
модель
public function types()
{
return $this->belongsToMany('App\Type');
}
Я могу достичь своих результатов с помощью этой функции в модели, однако я не могу передать переменную таким образом, как я могу это сделать?
return $this->belongsToMany('App\Book')->wherePivotIn('type_id', [1,2]);