Как написать этот необработанный запрос в Eloquent - PullRequest
0 голосов
/ 15 октября 2019

У меня есть sql-запрос, и я хочу знать, можно ли его написать в eloquent.

Есть две таблицы Brands и Products.

Я пытаюсь получить бренды, относящиеся к определенной категории товаров

Ниже показано, как это выглядит в настоящее время

\DB::select('select * FROM brands WHERE id in ( select brand_id from products WHERE category_id IN (220, 222, 223) GROUP by brand_id )');

Выше работает, я хочу помочьпревращая его в красноречивый.

Ответы [ 3 ]

2 голосов
/ 15 октября 2019

Предполагая, что вы уже подготовили модели Brand и Product, вы можете указать замыкание для включения подзапроса в ваше предложение WHERE IN следующим образом:

Brand::whereIn('id', function ($query) {
    $query
        ->select('brand_id')
        ->from('products')
        ->whereIn('category_id', [220, 222, 223])
        ->groupBy('brand_id');
})->get();
0 голосов
/ 15 октября 2019

Учитывая, что у вас есть модель вашего бренда и продукты для этого, вы будете делать: $ бренды = бренд :: с (['category' => функция ($ query) {$ query-> select ('category_id')}]) -> whereIn ('category_id', [220, 222, 223]) -> get ();

0 голосов
/ 15 октября 2019

Вы хотите настроить свои модели, чтобы вы могли запрашивать их с помощью Eloquent;когда у вас есть те, которые вы можете сделать:

$categoryIds = [220, 222, 223];

$brandIds = Product::whereIn('category_id', $categoryIds)
                ->groupBy('brand_id')
                ->pluck('brand_id');

$yourQuery = Brand::whereIn('id', $brandIds)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...