我有一个名为debtors
的模型。我想与具有相同phone_home
和phone_work
属性的所有其他债务人建立关系。
我知道我可以做到:
public function dupes_phone_home()
{
return $this->hasMany('App\Debtor', 'phone_home', 'phone_home');
}
public function dupes_phone_work()
{
return $this->hasMany('App\Debtor', 'phone_work', 'phone_work');
}
如何将这两个关系合并为一个,以便可以在急需的加载等中使用?
编辑:我想要的示例:
$debtor1 = Debtor::create([
'name' => 'Joe Blow',
'phone_home' => '123',
'phone_work' => '456',
]);
$debtor2 = Debtor::create([
'name' => 'Joe Blow Dupe 1',
'phone_home' => '123',
'phone_work' => '789',
]);
$debtor3 = Debtor::create([
'name' => 'Joe Blow Dupe 2',
'phone_home' => null,
'phone_work' => '456',
]);
$joe_with_dupes = Debtor::with('dupes')->get()->toArray();
会给我类似的东西
[
'name' => 'Joe Blow',
'phone_home' => '123',
'phone_work' => '456',
'dupes' => [
[
'name' => 'Joe Blow Dupe 1',
'phone_home' => '123',
'phone_work' => '789',
],
[
'name' => 'Joe Blow Dupe 2',
'phone_home' => null,
'phone_work' => '456',
],
],
],
[
'name' => 'Joe Blow Dupe 1',
'phone_home' => '123',
'phone_work' => '789',
'dupes' => [
[
'name' => 'Joe Blow',
'phone_home' => '123',
'phone_work' => '456',
],
],
],
...
答案 0 :(得分:0)
您可以像这样加入这两个关系:
and
这可能不适用于急切加载,因此您可以将此属性(class Debtor extends Model
{
public function debtors()
{
return Debtor::where(function ($query) {
return $query->where('phone_home', $this->phone_home)
->orWhere('phone_work', $this->phone_work);
}
}
public function getDebtorsAttribute()
{
return $this->debtors()->get();
}
// your relationships
}
)添加到debtors
模型配置中,但是要考虑到这种关系有点儿不对头(外部和外部的值相同)父键)可能会导致递归问题。