Laravel красноречивый запрос запроса, кратный - PullRequest
0 голосов
/ 24 марта 2020

У меня есть модель с таблицей отношений и сводной таблицей.

Книги

имя пользователя

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]);

1 Ответ

0 голосов
/ 24 марта 2020

в вашей книжной модели имеет много связей с таблицей книжного типа по bookid

use App\Book;//in top of your model
     public function bookWithType() {
            return $this->hasMany(Book::class, 'book_id');
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...