I have build below query in mysql. and trying a lot to convert to laravel but not success.
SELECT u.id, u.purchase_item_name,u.sales_item_name, us.type,
GROUP_CONCAT(p.itemcode) AS purchase_items,
GROUP_CONCAT(s.itemcode) as sales_items
FROM composite_inventories as u
LEFT JOIN composite_has_inventories as us ON u.id = us.composite_inventory_id
LEFT JOIN inventories as s ON US.inventory_id = s.id AND us.type='sale'
LEFT JOIN inventories as p ON US.inventory_id = p.id AND us.type='purchase'
GROUP BY u.id
I am trying to above query in to laravel datatabel query but it gives errors as below.
SQLSTATE[42000]: Syntax error or access violation: 1055 'saas.composite_inventories.purchase_item_name' isn't in GROUP BY (SQL: select GROUP_CONCAT(p.itemcode) as purchase_items, GROUP_CONCAT(s.itemcode) as sales_items, composite_inventories.id, composite_inventories.purchase_item_name, composite_inventories.sales_item_name, us.type from composite_inventories left join composite_has_inventories as us on composite_inventories.id = us.composite_inventory_id left join inventories as s on US.inventory_id = s.id and us.type = 'sale' left join inventories as p on US.inventory_id = p.id and us.type = 'purchase' group by composite_inventories.id)
I have tried below laravel query.
$result = Compositeinventory::select([
DB::raw('GROUP_CONCAT(p.itemcode) as purchase_items'),
DB::raw('GROUP_CONCAT(s.itemcode) as sales_items'),
'composite_inventories.id',
'composite_inventories.purchase_item_name',
'composite_inventories.sales_item_name',
'us.type'
])->leftJoin('composite_has_inventories as us', 'composite_inventories.id', '=', 'us.composite_inventory_id')
->leftJoin('inventories as s', function($join)
{
$join->on('US.inventory_id', '=', 's.id');
$join->on('us.type','=',DB::raw("'sale'"));
})
->leftJoin('inventories as p', function($join)
{
$join->on('US.inventory_id', '=', 'p.id');
$join->on('us.type','=',DB::raw("'purchase'"));
})
->groupBy('composite_inventories.id')->get();
I just tried below query
$row = DB::table('composite_inventories as u')->select([
'u.id',
'u.purchase_item_name',
'u.sales_item_name',
DB::raw('GROUP_CONCAT(p.itemcode) as purchase_items'),
DB::raw('GROUP_CONCAT(s.itemcode) as sales_items')
])->leftJoin('composite_has_inventories as us', 'u.id', '=', 'us.composite_inventory_id')
->leftJoin('inventories as s', function($join)
{
$join->on('US.inventory_id', '=', 's.id');
$join->on('us.type','=',DB::raw("'sale'"));
})
->leftJoin('inventories as p', function($join)
{
$join->on('US.inventory_id', '=', 'p.id');
$join->on('us.type','=',DB::raw("'purchase'"));
})
->groupBy('u.id', 'u.purchase_item_name','u.sales_item_name');
above query works when display data table. but when i try to search filter it gives below error because of purchase_items and sales_items field are not present in database but that are just aliases. error is
Exception Message:↵↵SQLSTATE[42000]: Syntax error or access violation: 1583 Incorrect parameters in the call to native function 'LOWER' (SQL: select count as aggregate from (select
u.id,u.purchase_item_name,u.sales_item_name, GROUP_CONCAT(p.itemcode) as purchase_items, GROUP_CONCAT(s.itemcode) as sales_items fromcomposite_inventoriesasuleft joincomposite_has_inventoriesasusonu.id=us.composite_inventory_idleft joininventoriesassonUS.inventory_id=s.idandus.type= 'sale' left joininventoriesasponUS.inventory_id=p.idandus.type= 'purchase' where (LOWER(composite_inventoriesasu.purchase_item_name) LIKE %a% or LOWER(composite_inventoriesasu.purchase_items) LIKE %a% or LOWER(composite_inventoriesasu.sales_item_name) LIKE %a% or LOWER(composite_inventoriesasu.sales_items) LIKE %a%) group byu.id,u.purchase_item_name,u.sales_item_name) count_row_table)