通过另一种关系检索关系

时间:2017-12-20 09:31:20

标签: laravel eloquent laravel-eloquent

我使用Eloquent关系在Laravel中设置了以下内容......

class AccountNumber extends Model {
    public function account() {
        return $this->morphTo();
    }
}

这样做的原因是我们支持多种类型的帐户,这些帐户的模型具有完全不同的信息。为了这个例子的利益,我称他们为AccountOfTypeX ......

class AccountOfTypeX extends Model {
    // referenced by AccountNumber
}

接下来,我们有一个由帐户拥有的模型;在我们的系统中,我们远离引用AccountNumber,因为它是任何帐户的唯一标识符,无论它是什么类型。因此,AccountNumberAccountOfTypeX基本上具有强制性的一对一关系。

帐户拥有的任何模型都链接到帐户编号,而帐户编号又链接到帐户。我们将其设置为folloos(在Trait中,但对于此示例,我只是提供一个虚拟类作为示例):

class SomeModel extends Model {
    public function accountnumber() {
        return $this->belongsTo(AccountNumber::class);
    }

    // the below method is added as a convenience to immediately retrieve the account
    public function account() {
        return $this->accountnumber->account();
    }
}

这是我所看到的行为:

$someModel->accountnumber;
// correctly returns the accountnumber model / object

$accountnumber = $someModel->accountnumber;
$accountnumber->account;
// correctly returns the account model / object

$someModel->account();
// correctly returns the MorphTo relationship object

$someModel->accountnumber->account;
// correctly returns the account model / object

$someModel->account;
// **falsely** returns NULL

我没有看到我在这里做错了什么。我也无法解释为什么这不起作用。我对$someModel->accountnumber->account所做的事情应该与$someModel->account具有完全相同的效果,不是吗?

作为一种解决方法,我们一直在做第一个,但感觉不对,我希望能够使用快捷方式帮助程序立即获取帐户,而无需编写额外的步骤。

再次感谢您的协助: - )

1 个答案:

答案 0 :(得分:0)

$ someModel对象尚未在给定代码中初始化。