雄辩的方法流明

问题描述 投票:0回答:1

我已经属于物品和车辆之间的关系。

物品可以分配给多辆车。同一车辆可以分配给多个项目。所以我的数据透视表item_vehicle有额外的列日期,这将显示车辆被分配到项目时。

这是我的查询。

select `items`.`id`, `items`.`name`, `items`.`area` as `total_area`,
`item_vehicle`.`date`, `vehicles`.`name` as `vehicle_name`,
SUM(parcel_vehicle.area) as processed_area
from `parcels`
inner join `item_vehicle` on `item_vehicle`.`p_id` = `items`.`id`
inner join `vehicles` on `item_vehicle`.`t_id` = `vehicles`.`id` 
where `item_vehicle`.`date` < '?' and `items`.`processed` = ? and `vehicles`.`name`=?

items.id小组将以何种雄辩的方式做到这一点

Item::with(['vehicle'=>function($q){$q->wherePivot('date','<','2019/2/12');}])->whereHas('vehicle',function($q){$q->where('vehicles.id','2');})->where('processed',1)->where('id',4)
->get();

我担心的是它应该只运行一个查询

laravel eloquent lumen
1个回答
1
投票
$parcels = Parcel::join('item_vehicle', 'item_vehicle.pid', '=' ,'items.id')
->join('vehicles', 'vehicles.id', '=' ,'item_vehicle.t_id')
->where('item_vehicle.date', '<', $date)
->where('items.processed', $processed)
->where('vehicles.name', $vehicleName)
->select(
    'items.id',
    'items.name',
    \DB::raw('items.area as total_area'),
    'item_vehicle.date',
    \DB::raw('vehicles.name as vehicle_name'),
    \DB::raw('SUM(parcel_vehicle.area) as processed_area')
)
->groupBy('items.id')
->get();

但是,您在select中有非聚合列,并且您正在进行分组。要完成这项工作,您可能需要禁用mysql的only_full_group_by模式

© www.soinside.com 2019 - 2024. All rights reserved.