我有一个包含事务的表,其中每个Transaction
都属于Driver
或Customer
-因此我在它们之间设置了多态关系。
对于交易,我已设置:
public function owner() {
return $this->morphTo();
}
对于驾驶员和客户:
public function transactions() {
return $this->morphMany(Transaction::class, 'owner');
}
但是每个驱动程序也属于Company
。我正在尝试通过Company
关系获取属于hasManyThrough
的所有交易:
public function transactions() {
return $this->hasManyThrough(Transaction::class, Driver::class);
}
但是它似乎不适用于多态关系,因为它会抛出错误,因为它试图在driver_id
表中查找transactions
字段。
通过驱动程序获取属于公司的所有交易的方式是什么?
答案 0 :(得分:2)
指定自定义外键并为owner_type
列添加约束:
public function transactions() {
return $this->hasManyThrough(Transaction::class, Driver::class, null, 'owner_id')
->where('owner_type', Driver::class);
}
没有约束,您将获得具有相同id
的不同所有者的交易。