【发布时间】:2021-04-05 02:41:43
【问题描述】:
我发现的所有多态示例都是一对多的,如果我理解正确的话。 (标签发布/视频,例如) 在我的情况下,父类是多个,子类也是。因此我设置了数据透视表
Tables
Person
id
Venture
id
Capital
id
Estate
id
PIVOT TABLE
Revenues
emitter_id //ID of the revenue emitting class (Venture, Capital, Estate)
emitter_type // Class of the Emitter (App\Models\Venture App\Models\Estate)
receiver_id // Id of Receiver (Venture or Person)
receiver_type // type of Receiver (App\Models\Venture or App\Models\Person)
revenue
在房地产模型中我试试这个
public function revenuePersons()
{
// searched type, own type/id ,tabel own ID to search id
return $this->morphToMany(Person::class, 'emitter' ,'revenues' ,'emitter_id','receiver_id')
->withPivot('revenue');
}
一个人模型
public function estaterevenues(){
// searched type, own type/id ,tabel own ID to search id
return $this->morphToMany(Estate::class, 'receiver' ,'revenues' ,'receiver_id','emitter_id')
->withPivot('revenue');
}
代码有效,但在某些情况下,我得到了额外的关系。所以它接缝搜索的_type没有被正确考虑。
所以我开始实现一个自己的数据库查询函数,它可以返回收入条目。它工作正常。
Revenue Model
public function getRevenue($ownside, $emitter_id = Null, $emitter_type,$receiver_id=Null, $receiver_type ){
$revenue = DB::table('revenues')
->where('emitter_id', $emitter_id)
.....()->get()}
但我不能做类似的事情
$persons->getRevenues
因为关系应该作为返回值
因此,如果有人知道如何正确地做到这一点,我会非常高兴。或者这种多对多方法的其他一些最佳实践。
第二个问题是如何一次获得所有收入接收者。 而不是
$estate->revenuepersons
$estate->revenueventures
有类似的东西
$estate->revenues //that list both, Ventures and Persons
【问题讨论】: