Laravel通过多态关系有很多

时间:2018-10-31 04:51:35

标签: laravel eloquent relationship has-many-through polymorphic-associations

我有一个包含事务的表,其中每个Transaction都属于DriverCustomer-因此我在它们之间设置了多态关系。

对于交易,我已设置:

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字段。

通过驱动程序获取属于公司的所有交易的方式是什么?

1 个答案:

答案 0 :(得分:2)

指定自定义外键并为owner_type列添加约束:

public function transactions() {
    return $this->hasManyThrough(Transaction::class, Driver::class, null, 'owner_id')
        ->where('owner_type', Driver::class);
}

没有约束,您将获得具有相同id的不同所有者的交易。