Запрос: количество продукта с настраиваемой переменной, такой как цвет, размер - PullRequest
0 голосов
/ 27 октября 2019

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

$stockReport = DB::table('products')
        ->rightjoin('stock_reports','stock_reports.product_id','products.id')
         ->join('sizes','sizes.id','stock_reports.size_id')
         ->join('colors','colors.id','stock_reports.color_id')
        ->select('products.product_name','stock_reports.created_at'
            DB::raw('sum(quantity)'))

        ->groupby('stock_reports.created_at','products.product_name')
        ->orderby('stock_reports.created_at','desc')
        ->get();

Вывод должен понравиться:

Name           Quantity    CREATED_AT
product_name1  XL-BLUE-15, L-RED-20 2019-08-12 
product_name2  L-BLUE-15, S-RED-20 2019-08-12
product_name1  M-BLUE-15, L-RED-20 2019-08-13

Моя структура таблицы:

продукты:

 id product_name

stock_reports

 id
 product_id
 size_id
 quantity
 color_id
 sold_price

размеры

  id
  size_name

цвета

  id
  color_name

1 Ответ

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

Сначала создайте модели по терминалу или вручную

php artisan make:model stock_reports
php artisan make:model sizes
php artisan make:model products
php artisan make:model colors

Добавьте в файл stock_reports.php в приложении-словаре

    public function product()
    {
        return $this->belongsTo(products::class, 'product_id');
    }
    public function size()
    {
        return $this->belongsTo(sizes::class, 'size_id');
    }
    public function color()
    {
        return $this->belongsTo(colors::class, 'color_id');
    }

Добавьте отчеты о функциях в products.php

    public function reports()
    {
        return $this->hasMany(stock_reports::class, 'product_id');
    }

Наконец, под вашим контролем используйте:


        $stock_reports=stock_reports::
        with('product')
        ->get()->sortBy('product.product_name')->sortBy('created_at');

        foreach($stock_reports as $report)
        {
            $product_name=$report->product->product_name;
            $size_name=$report->size->size_name;
            $color_name=$report->color->color_name;
            $qty_products=$report->product->reports()->count();

            // use wherever you need to use it

        }

Результаты:


Name Quantity CREATED_AT
T-shirt C x-Red-1 2019-09-11 18:55:12
Name Quantity CREATED_AT
T-shirt D xl-Blue-1 2019-09-11 18:55:12
Name Quantity CREATED_AT
T-shirt A xl-Blue-1 2019-09-12 18:55:12
Name Quantity CREATED_AT
T-shirt B x-White-1 2019-09-13 18:55:12

Некоторые предложения:

  1. Использование нумерация страниц вместо -> get ()

  2. Использовать внешние ключи

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