Laravel中的hasManyThrough是一种多态关系。

3

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

对于Transaction,我设置了:

public function owner() {
    return $this->morphTo();
}

针对司机和乘客:

public function transactions() {
    return $this->morphMany(Transaction::class, 'owner');
}

但是每个司机也属于一个公司。我正试图通过hasManyThrough关系获取所有属于公司的交易:

public function transactions() {
    return $this->hasManyThrough(Transaction::class, Driver::class);
}

但是在多态关系上似乎不起作用,因为它会抛出一个错误,因为它试图在transactions表中查找一个driver_id字段。

如何通过司机获取属于公司的所有交易记录?

1个回答

10

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

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

如果没有这个约束条件,你将得到不同所有者的交易具有相同的id


可以了,谢谢!这也回答了我的问题,即如何获取具有相同“id”的其他所有者的交易。只剩一个问题:null代表什么?我似乎尝试过类似的东西,但是像 return $this->hasManyThrough(Transaction::class, Driver::class, null, 'owner_id') - Zlautumn
第三个参数是drivers表中的外键。当您传递null时,Laravel将使用默认的company_id。您也可以显式地传递该值。 - Jonas Staudenmeir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接