【发布时间】:2022-01-10 13:45:32
【问题描述】:
我有 4 个模型:物质、效果、部分、属性。 每个 Matter 都有几个 Part,每个 Part 都有几个效果和属性。 每个效果也有几个属性。
我想要 Laravel eloquent 的这个结果:
property_title |效果数 (effect_property) |效果数 (part_property) |财产的影响
所有这些值都应该在有限的情况下 ids 已经给出并且包括在任何效果和任何部分中的属性(意思不包括仅在部分中的属性)事项或仅在效果上的事项)。
我进行了此查询,但处理大量数据的时间太长:
$result = Property::matterin($where)
->leftJoin('part_property', 'part_property.property_id', '=', 'properties.id')
->leftJoin('parts', 'parts.id', 'part_property.part_id')
->select(['parts.*','parts.matter_id','properties.id as id', 'properties.title as title',
DB::raw('sum(if(part_property.part_id is not null,1,0 )) as count_partmatter'),
])
->whereNotNull(['properties.id'])
->groupBy(['properties.id'])
->get();
foreach($result as $key => $prop) {
if($prop->effects->isNotEmpty()){
$prop->effects()
->leftJoin('effect_part','effect_part.effect_id','effects.id')
->leftJoin('parts','parts.id','effect_part.part_id')
->whereIn('parts.matter_id',$where);
}else{
$result->forget($key);
}
}
但最后一列存在每个属性对所有事务的所有影响,而不仅仅是具有特定 $where 事务 ID 的那些。
【问题讨论】:
标签: mysql laravel database eloquent