使用具有 belongsTo 关系的访问器修改器
Using accessor mutator with a belongsTo relationship
使用 Laravel 4 并且我在我的用户模型中设置了一个修改器:
public function getFullnameAttribute($value)
{
return $this->first_name. ' ' .$this->last_name;
}
但是我在我的 Cars 模型中为链接到那辆车的用户 ID 建立了关系:
public function salesManager()
{
return $this->belongsTo('User', 'sales_manager')->select('first_name', 'last_name');
}
我在我的车上调用这种关系 table:
$cars = Car::with('marqueBasic', 'modelBasic', 'salesManager')
->get();
现在,我该怎么做,例如
$car->salesManager->fullname
目前不工作,我假设这是因为它在另一个模型中,而不是被调用的模型?
错误是:"Trying to get property of non-object"
我是不是在错误的地方调用了修改器?我曾尝试将其放入关系 select 字段中,但也搜索了全名的字段名称并出现错误。
可能的原因是您正在定义要为关系获取的字段列表。
为了理解原因,您需要先了解当您要求 salesManager 关系获取 all Cars 时,它是如何急切地加载 salesManager 关系的他们的销售经理。 Eloquent 在这种情况下执行以下操作:
- 加载所有汽车
- 获取所有已装载汽车的 sales_manager 列的值
- 加载 ID 在第 2 点的值范围内的所有用户。
- 通过匹配获取的用户模型的 g id 和汽车的 sales_manager 列,将加载的用户模型映射到汽车。
如您所见,第 4 步是不可能完成的。用户的 id 字段未列在要为 salesManager 关系获取的字段列表中,因此 Eloquent,急切加载时 [=17] =]salesManager,无法将获取的用户与汽车相匹配。您需要将您在 salesManager 关系中引用的字段添加到列表:
public function salesManager()
{
return $this->belongsTo('User', 'sales_manager')->select('first_name', 'last_name', 'id');
}
使用 Laravel 4 并且我在我的用户模型中设置了一个修改器:
public function getFullnameAttribute($value)
{
return $this->first_name. ' ' .$this->last_name;
}
但是我在我的 Cars 模型中为链接到那辆车的用户 ID 建立了关系:
public function salesManager()
{
return $this->belongsTo('User', 'sales_manager')->select('first_name', 'last_name');
}
我在我的车上调用这种关系 table:
$cars = Car::with('marqueBasic', 'modelBasic', 'salesManager')
->get();
现在,我该怎么做,例如
$car->salesManager->fullname
目前不工作,我假设这是因为它在另一个模型中,而不是被调用的模型?
错误是:"Trying to get property of non-object"
我是不是在错误的地方调用了修改器?我曾尝试将其放入关系 select 字段中,但也搜索了全名的字段名称并出现错误。
可能的原因是您正在定义要为关系获取的字段列表。
为了理解原因,您需要先了解当您要求 salesManager 关系获取 all Cars 时,它是如何急切地加载 salesManager 关系的他们的销售经理。 Eloquent 在这种情况下执行以下操作:
- 加载所有汽车
- 获取所有已装载汽车的 sales_manager 列的值
- 加载 ID 在第 2 点的值范围内的所有用户。
- 通过匹配获取的用户模型的 g id 和汽车的 sales_manager 列,将加载的用户模型映射到汽车。
如您所见,第 4 步是不可能完成的。用户的 id 字段未列在要为 salesManager 关系获取的字段列表中,因此 Eloquent,急切加载时 [=17] =]salesManager,无法将获取的用户与汽车相匹配。您需要将您在 salesManager 关系中引用的字段添加到列表:
public function salesManager()
{
return $this->belongsTo('User', 'sales_manager')->select('first_name', 'last_name', 'id');
}