我有一个主表“设备”每个设备都与“设备日志”有一对一的关系
设备模型
class Device extends Model
{
public $hasMany = [
'devicelogs' => 'Myhome\Myplugin\Models\Devicelog'
];
}
DeviceLog模型:
class Devicelog extends Model
{
public $belongsTo = [
'device' => 'Myhome\Myplugin\Models\Device'
];
}
我想急切地加载设备关系,只有一个记录,以响应该关系的最新日志。
我试过做:
$d = Device::with([
'devicelogs' => function ($query) {
$query->latest('created_at')->limit(1)->get();
}
])->get();
有了这个,我只得到一台设备,它的关系设备日志有一个最新记录。我希望所有设备都有一个设备日志。
我尝试了以下几点:
$d = Device::with([
'devicelogs' => function ($query) {
$query->first();
}
])->get();
有了这个,我只得到一个设备,它的关系devicelogs有一条第一条记录。
当我这样做时:
$d = Device::with([
'devicelogs' => function ($query) {
$query->orderBy('created_at','desc');
}
])->get();
我确实得到了所有设备加载的关系收集在desc顺序。但问题是我不想要整个设备,我只想要每个设备的最新/最后一个。
所以我试着做:
$d = Device::with([
'devicelogs' => function ($query) {
$query->orderBy('created_at','desc')->limit(1);
}
])->get();
这同样只获取最新/最后一个设备日志,其中只有一个设备记录。rest所有设备获取空设备日志关系。
在记录中,每个设备至少有2个或更多devicelog。我想要的是,当我运行即时加载时,为每个设备返回一个和最后一个/最新的devicelog。
我不确定我到底哪里做错了。
有一种方法可以让你从中受益。在Laravel中,您只需定义一个新的关系并使其成为hasOne。
因为OctoberCMS仍然可以使用Laravel风格的关系方法。您可以执行以下操作:;
在您的设备中。php模型
public function latestDeviceLog()
{
return $this->hasOne('Myhome\Myplugin\Models\Devicelog')->latest();
}
然后你可以访问与。
Device::with('latestDeviceLog')->get();