laravel - Laravel 急切加载为空,具有多态关系
问题描述
在我的模型中,我有:
//UserAddress.php
protected $with = ['address'];
public function address()
{
return $this->morphOne('App\Address', 'addressable');
}
//User.php
public function userAddress()
{
return $this->hasOne(UserAddress::class);
}
//Address.php
public function addressable()
{
return $this->morphTo();
}
但是当我调用dd(auth()->user()->userAddress))
地址realtionship时没有加载。它仍然为空。
#attributes: array:4 [
"id" => "1"
"user_id" => "1"
"created_at" => "2018-11-13 10:11:54"
"updated_at" => "2018-11-13 10:11:54"
]
#original: array:4 [
"id" => "1"
"user_id" => "1"
"created_at" => "2018-11-13 10:11:54"
"updated_at" => "2018-11-13 10:11:54"
]
#changes: []
#casts: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: array:1 [
"address" => null
]
#touches: []
+timestamps: true
但是,与dd(auth()->user()->userAddress()->get()))
关系是急切的加载。
问题是什么?
编辑
这太奇怪了。如果我写auth()->user()->userAddress->address
,我会得到 null(不应该是这样)。当我删除时,我protected $with = ['address'];
auth()->user()->userAddress->address
得到了正确的模型。
解决方案
对于 id 字段是字符串的一对一关系,我遇到了同样的问题。一切正常,直到我急切加载连接表(在您的情况下为 user_address)。
在我的情况下,我忘记public $incrementing = false;
在连接表中定义,一旦我添加了这个,一切正常。
推荐阅读
- javascript - Angular firebase 不显示密钥
- jira - 维护 Confluence 和 Jira 之间的格式(创建 Jira Issue Micro)
- php - PHP | 404 未找到对象
- angular - 如何将参数传递给canActivate的构造函数?
- java - 春天。访问 Thymeleaf 中的配置变量。
- javascript - 查找表 TD 值
- javascript - 如何在共享点 Web 部件中添加内联 JS/HTML 代码
- reactjs - 如何在热模式下使用 webpack
- firebase - 单个照片路径进入多个 HashMap 元素
- java - Regex java用于提取第一个字母字符的正则表达式