laravel join: Как я могу объединять таблицы и извлекать различные типы данных в соответствии с моими условиями из одного и того же соединения? - PullRequest
0 голосов
/ 10 октября 2018

Это то, что я сделал до сих пор.

DB::table('products')
 ->leftjoin('inventories', 'inventories.product_id', 'products.id')
 })
 ->leftjoin('order_items as purchase_oi', function($query){
 $query->on('purchase_oi.inventory_id', 'inventories.id');
  $query->on('purchase_oi.status','!=', \DB::raw('"cancelled"'));
                        })                       
 ->select(DB::raw('sum(inventories.quantity)as qty'),
 DB::raw('count(purchase_oi.inventory_id) as purchases'),                            
  'products.id as pid', 'products.*')                          
  ->where('products.is_deleted', 0)
  ->where('inventories.is_deleted',0)
  ->groupBy('inventories.product_id')                  
  ->get();

Таблица order_items содержит статус в

enum('shipped','return''cancelled');

Эта проблема здесь при объединении с таблицей order_items.В настоящее время я просто получаю данные, которые не равны отмененным, но я хочу получить возвращаемые данные order_items и отмененные данные order_items. т.е. получите мне покупки, отмены и счетчик возврата из таблицы order_items. Ожидаемый результат:

0=>purchases = 4,
   returns = 10,
   cancelled = 2

1 Ответ

0 голосов
/ 10 октября 2018

Я думаю, что проблема ваша groupBy().Если у вас есть следующий запрос:

SELECT COUNT(*) AS count FROM table GROUP BY id

Вы не в итоге получите

+-------+
| count |
+-------+
| 5     |
+-------+

Вместо этого вы получите:

+-------+
| count |
+-------+
| 1     |
+-------+
| 1     |
+-------+
| 1     |
+-------+
| 1     |
+-------+
| 1     |
+-------+

Количество всех элементов за группирование .

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

\DB::enableQueryLog();
\DB::flushQueryLog();

//Execute your query

$queries = /DB::getQueryLog();
/DB::disableQueryLog();
/DB::flushQueryLog();

$queries = collect($queries)->map(function (array $query) {
    return array_only($query, ['query', 'bindings']);
})->toArray();

dd($queries);

Это должно точно сказать, что происходит с SQLказнены.

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