使用 Laravel 4,我在我的 User 模型中设置了一个 mutator:
public function getFullnameAttribute($value)
{
return $this->first_name. ' ' .$this->last_name;
}
但我在我的汽车模型中为链接到该汽车的用户 ID 设置了关系:
public function salesManager()
{
return $this->belongsTo('User', 'sales_manager')->select('first_name', 'last_name');
}
我在 Car 表上调用该关系:
$cars = Car::with('marqueBasic', 'modelBasic', 'salesManager')
->get();
现在,我该怎么办,例如
$car->salesManager->fullname
目前不起作用,我假设这是因为它与被调用的模型处于另一种模型中?
错误是:“尝试获取非对象的属性”
我是否在错误的地方调用了变异器?我尝试将其放入关系选择字段中,但也搜索了全名字段名称并出现错误。
可能的原因是您正在定义要为关系获取的字段列表。
为了理解为什么,你需要首先了解 Eloquent 是如何急切加载的销售经理当你要求它获取时的关系所有汽车及其销售经理。在这种情况下,Eloquent 会执行以下操作:
- 装载所有汽车
- 获取值销售经理所有装载车辆的列
- 加载 id 在第 2 点的值范围内的所有用户。
- 通过匹配获取的用户模型的 ID 和汽车销售经理列,将加载的用户模型映射到汽车。
如您所见,第 4 步是不可能完成的。用户的id字段未在要获取的字段列表中列出销售经理急切加载时关系如此雄辩销售经理,无法将获取的用户与汽车进行匹配。您需要添加您在中引用的字段销售经理与列表的关系:
public function salesManager()
{
return $this->belongsTo('User', 'sales_manager')->select('first_name', 'last_name', 'id');
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)