繁体   English   中英

仅返回最高的设备维护ID

[英]Return only the highest equipment maintenance id

我想获得最高maintence_idequipament展现给用户。 我可以在SQL中执行此操作,但不能在Eloquent或QueryBuilder中执行。

雄辩地返回了我的观点的所有维护:

$equipament = Maintence::SELECT('maintences.*', 'equipaments.patrimony as patrimony')
            ->LEFTJOIN('equipaments', 'maintences.equipament_id', '=', 'equipaments.id' )   
            ->get(); 

SQL返回最高maintence_idequipament

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();

我假设您的表名是equipmentsmaintenances ,如果不是,请在提供的查询中相应地调整表名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM