Упорядочивание Laravel и ограничение результатов левого соединения

Отношения "один ко многим", у каждого продукта много цен.

Таблица 1_

id | имя | пуля | created_at | update_at

Таблица 2_

id | product_id | название | цена | ссылка

Я хочу получить предел данных таблицы ограничения продукта 20 и заказ created_at, и каждый продукт получит самую низкую цену, цену столбца заказа. Я хочу использовать построитель запросов. Я пытался

$products = DB::table('products')
        ->leftJoin('prices', 'products.id', '=', 'prices.product_id')
        ->select('products.id', 'products.name')->distinct()
        ->selectRaw('max(prices.price) as price')
        ->groupby('products.id')
        ->orderby('products.updated_at')
        ->get();

но он получает все продукты и таблицу prices идентификатор столбца заказа


person thanh    schedule 30.04.2020    source источник
comment
почему вы не пользуетесь красноречием?   -  person void    schedule 30.04.2020
comment
@AbirAdak из-за большого количества таблиц и производительности построителя запросов лучше, чем красноречивый   -  person thanh    schedule 30.04.2020


Ответы (1)


Вы можете использовать Eloquent Like This

public function price() {
        return $this->hasMany('App\model\Prices' , 'product_id' ,'id');
    }

и получите вот так: он даст вам назначенную цену только для вашего конкретного продукта

$product = Product::with('price')
                  ->where(do the stuffs)
                  ->orderBy(do the stuffs) 
                  ->get();

Или вы также можете использовать обратный вызов в with ()

person void    schedule 30.04.2020
comment
Я попробовал $ products = Product :: with (['price' = ›function ($ price) {$ price-› orderBy ('price', 'desc'); $ price- ›take (20);}]) - ›Take (20) -› get (); у каждого товара много цен. но эти красноречивые 20 продуктов имеют только 1 самую низкую цену. Я хочу, чтобы каждый товар получал 1 наименьшую цену - person thanh; 30.04.2020