Laravel/Octobercms 与一条记录的预加载关系
Laravel/Octobercms eager load relation with one record
我有主菜 table "devices"
每个设备都与 "devicelogs"
有一对多的关系
设备型号
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();
我确实让所有设备都按降序加载了关系集合。但问题是我不想要整个设备日志,我只想要 latest/last 每个设备一个。
所以我尝试这样做:
$d = Device::with([
'devicelogs' => function ($query) {
$query->orderBy('created_at','desc')->limit(1);
}
])->get();
这再次只获取 latest/last 个设备日志,其中只有一个设备的单个记录。休息所有设备得到空设备日志关系。
据记录,每个设备至少有 2 个或更多设备日志。
我想要的是当我 运行 急切加载时,每个设备只有一个 last/latest 设备日志到 return。
我不确定我到底哪里做错了。
有一种方法可以解决这个问题,您可能会从中受益。在 Laravel 中,您只需定义一个新关系并将其设为 hasOne。
自 OctoberCMS 仍然可以使用 Laravel 样式关系方法。您可以执行以下操作;
在您的 Device.php 模型中
public function latestDeviceLog()
{
return $this->hasOne('Myhome\Myplugin\Models\Devicelog')->latest();
}
然后你就可以访问了。
Device::with('latestDeviceLog')->get();
我有主菜 table "devices" 每个设备都与 "devicelogs"
有一对多的关系设备型号
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();
我确实让所有设备都按降序加载了关系集合。但问题是我不想要整个设备日志,我只想要 latest/last 每个设备一个。
所以我尝试这样做:
$d = Device::with([
'devicelogs' => function ($query) {
$query->orderBy('created_at','desc')->limit(1);
}
])->get();
这再次只获取 latest/last 个设备日志,其中只有一个设备的单个记录。休息所有设备得到空设备日志关系。
据记录,每个设备至少有 2 个或更多设备日志。 我想要的是当我 运行 急切加载时,每个设备只有一个 last/latest 设备日志到 return。
我不确定我到底哪里做错了。
有一种方法可以解决这个问题,您可能会从中受益。在 Laravel 中,您只需定义一个新关系并将其设为 hasOne。
自 OctoberCMS 仍然可以使用 Laravel 样式关系方法。您可以执行以下操作;
在您的 Device.php 模型中
public function latestDeviceLog()
{
return $this->hasOne('Myhome\Myplugin\Models\Devicelog')->latest();
}
然后你就可以访问了。
Device::with('latestDeviceLog')->get();