我使用Eloquent关系在Laravel中设置了以下内容......
class AccountNumber extends Model {
public function account() {
return $this->morphTo();
}
}
这样做的原因是我们支持多种类型的帐户,这些帐户的模型具有完全不同的信息。为了这个例子的利益,我称他们为AccountOfTypeX ......
class AccountOfTypeX extends Model {
// referenced by AccountNumber
}
接下来,我们有一个由帐户拥有的模型;在我们的系统中,我们远离引用AccountNumber,因为它是任何帐户的唯一标识符,无论它是什么类型。因此,AccountNumber
和AccountOfTypeX
基本上具有强制性的一对一关系。
帐户拥有的任何模型都链接到帐户编号,而帐户编号又链接到帐户。我们将其设置为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
具有完全相同的效果,不是吗?
作为一种解决方法,我们一直在做第一个,但感觉不对,我希望能够使用快捷方式帮助程序立即获取帐户,而无需编写额外的步骤。
再次感谢您的协助: - )
答案 0 :(得分:0)
$ someModel对象尚未在给定代码中初始化。