作为关系重复

时间:2019-02-15 23:41:33

标签: php laravel

我有一个名为debtors的模型。我想与具有相同phone_homephone_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',
        ],
    ],
],
...

1 个答案:

答案 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模型配置中,但是要考虑到这种关系有点儿不对头(外部和外部的值相同)父键)可能会导致递归问题。