Как использовать функцию Laravel Eloquent whereIn на другом столе? - PullRequest
0 голосов
/ 07 марта 2019

Если между двумя таблицами есть взаимосвязь, я использую функцию with, чтобы получить записи с учетом значения в условии из другой таблицы. Например:

Table::where('column1', 'text1')->with('table2.column2', 'text2')

У меня вопрос, как я могу использовать функцию whereIn для установки массива допустимых значений в table2?

Table::where('column1', 'text1')->whereIn('table2.column2', ['text2', 'text3'])

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Я бы пошел с Ограниченным нетерпеливым грузом Laravel , чтобы загрузить ваши отношения.

Пример

Table::where('column1', 'text1')
    ->with(['table2' => function ($query) {
        $query->whereIn('column2', ['text2', 'text3'])
    }])
    ->get();

Если вам не нужно загружать отношения, то лучше использовать решение whereHas, предоставленное @bhavinjr.


Из документации:

Стремление загружать несколько отношений

Иногда вам может понадобиться загрузить несколько разных отношений за одну операцию. Для этого просто передайте дополнительные аргументы методу with:

$books = App\Book::with(['author', 'publisher'])->get();

Ограничение энергичных нагрузок

Иногда вы можете захотеть загрузить отношения, но также указать дополнительные условия запроса для запроса загрузки. Вот пример:

$users = App\User::with(['posts' => function ($query) {
    $query->where('title', 'like', '%first%');
}])->get();`

Вы можете взглянуть на Laravel API , чтобы глубже понять метод with.

1 голос
/ 07 марта 2019

Попробуйте это

Table::where('column1', 'text1')
    ->whereHas('table2',function($q) {
        $q->whereIn('column2', ['text2','text3']);
    });

Вы должны определить отношения в модели

Это лучшая практика

См. Красноречивые отношения Ларавела

См .: Запрос на связь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...