Return只有最高的装备维修id
Return only the highest equipment maintenance id
我想获得 equipament
的最高 maintence_id
以显示给用户。我可以在 SQL 中执行此操作,但不能在 Eloquent 或 QueryBuilder 中执行。
Eloquent returns 我认为的所有维护:
$equipament = Maintence::SELECT('maintences.*', 'equipaments.patrimony as patrimony')
->LEFTJOIN('equipaments', 'maintences.equipament_id', '=', 'equipaments.id' )
->get();
SQL 返回 equipament
的最高 maintence_id
:
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 )
试一试:
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.*']);
有同样的问题here。
总是尽可能使用更简单的术语来搜索问题。其作品! :)
关于问题。
例如,为什么最大 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();
我假设您的 table 名称是 equipments
和 maintenances
,如果不是,请在提供的查询中相应地调整 table 名称。
我不建议您在 JOIN 子句中或在 SELECT 一个中使用内部查询...它将 运行 它用于 "each" 行。最好在模型 Class 上声明一个将获得最后一个的关系。见上面的代码:
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();
我想获得 equipament
的最高 maintence_id
以显示给用户。我可以在 SQL 中执行此操作,但不能在 Eloquent 或 QueryBuilder 中执行。
Eloquent returns 我认为的所有维护:
$equipament = Maintence::SELECT('maintences.*', 'equipaments.patrimony as patrimony')
->LEFTJOIN('equipaments', 'maintences.equipament_id', '=', 'equipaments.id' )
->get();
SQL 返回 equipament
的最高 maintence_id
:
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 )
试一试:
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.*']);
有同样的问题here。 总是尽可能使用更简单的术语来搜索问题。其作品! :)
关于问题。 例如,为什么最大 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();
我假设您的 table 名称是 equipments
和 maintenances
,如果不是,请在提供的查询中相应地调整 table 名称。
我不建议您在 JOIN 子句中或在 SELECT 一个中使用内部查询...它将 运行 它用于 "each" 行。最好在模型 Class 上声明一个将获得最后一个的关系。见上面的代码:
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();