[英]Return only the highest equipment maintenance id
我想获得最高maintence_id
为equipament
展现给用户。 我可以在SQL中执行此操作,但不能在Eloquent或QueryBuilder中执行。
雄辩地返回了我的观点的所有维护:
$equipament = Maintence::SELECT('maintences.*', 'equipaments.patrimony as patrimony')
->LEFTJOIN('equipaments', 'maintences.equipament_id', '=', 'equipaments.id' )
->get();
SQL返回最高maintence_id
为equipament
:
select *
from equipaments
left join maintences on maintences.equipament_id = equipaments.id
and maintences.id = (select max(id) from maintences as main
where
main.equipament_id = equipaments.id )
我不建议您在JOIN子句中使用内部查询,也不要在SELECT一个中使用内部查询...它将对“每一”行运行它。 最好在模型类上声明一个关系,该关系将得到最后一个。 参见上面的代码:
class Equipament extends Model {
//Declaration of relation with Maintence
public function maintences() {
return $this->hasMany(Maintence::class);
}
//Ddeclaration of last Maintence relation filter
public function lastMaintence() {
return $this->maintences()->orderBy('id', 'desc')->limit(1);
}
}
然后,您可以像这样使用:
$equipament = Equipament::with('lastMaintence')->find(1);
$lastMaintence = equipament->lastMaintence()->first();
试试吧:
Maintence::join( DB::raw(
'(select max(id) as id,equipament_id as equipament_id from maintences group by equipament_id order by id desc) sub'
), 'sub.equipament_id', '=', 'equipaments.id')
->get(['maintences.*']);
这里也有同样的问题。 始终使用更简单的术语搜索问题。 其作品! :)
关于这个问题。 例如,为什么要使用最大ID而不是最后一个版本的设备? 检查您真正想要的是什么,因为例如序列ID不一定要更新。
我认为这是您要照顾的:
Equipment::select('equipments.id', 'equipments.name', 'maintenances.id as maintenance_id')
->leftJoin( \DB::raw(
'(select max(id) as id,equipment_id as equipment_id from maintenances group by equipment_id order by id desc) maintenances'
), 'maintenances.equipment_id', '=', 'equipments.id')
->get();
我假设您的表名是equipments
和maintenances
,如果不是,请在提供的查询中相应地调整表名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.