【发布时间】:2018-09-12 01:09:21
【问题描述】:
我有三个通过morph 关系相关的模型。
Shipment 可以通过StatusHistory 类拥有多个Status 实例。
class Status extends Model {
//id, name
}
class Shipment extends Model {
public function latestStatus() {
return $this->morphOne('App\StatusHistory', 'model')->latest();
}
}
class StatusHistory extends Model {
public function model() {
return $this->morphTo();
}
public function status() {
return $this->belongsTo('App\Status', 'status_id');
}
}
我想获取 latestStatus 具有特定 Status 名称值的所有 Shipment 实体。
Shipment::whereHas('latestStatus', function($query) {
return $query->whereHas('status', function($query) {
return $query->where('name', 'reserved');
});
})->get();
这不起作用并返回所有状态为“已保留”的实体,即使 latestStatus 可以是别的东西。
有什么想法吗?
编辑(添加示例信息):
我有 2 批货物。
- 第一个只有一个状态历史实例,其状态名称为“已保留”。
- 第二个有两个状态历史实例,其状态名称为“已保留”和“已发货”。 'shipped' 的状态历史实例是在 'reserver' 之后创建的。
所以:
- 第一批货物的最后状态为“已保留”。
- 第二批货物的最后状态为“已发货”。
调用应该只返回第一批货物。
【问题讨论】:
标签: laravel laravel-5 laravel-5.5 laravel-5.6