Laravel - 从关系的属性中获取值作为当前模型的属性
Laravel - getting a value from a relationship's attributes as an attribute of the current model
我有 2 个模型:Car 和 Condition
Car 和 Condition 具有一对一的多态关系。条件加入到汽车上:
class Car extends Model
{
// ...
public function condition()
{
return $this->morphOne(Condition::class, 'carable');
}
}
class Condition extends Model
{
// ...
public function carable()
{
return $this->morphTo()
}
}
这个return结构如下:
{ // car
"id": 1,
"condition": {
"age": "1 year",
"serviced": "yes"
}
}
我还想 return 汽车等级的 age
属性,即
{ // car
"id": 1,
"age": "1 year",
"condition": {
"age": "1 year",
"serviced": "yes"
}
}
我想通过获取汽车模型中的条件->年龄属性来完成此操作。我尝试在 Car class:
中设置以下内容
protected $appends = ["age"];
protected function getAgeAttribute()
{
return $this->getFinancialAttribute()->getAgeAttribute();
}
以及它的一些其他变体,但没有成功。有什么办法让我优雅地做到这一点?
您可以尝试将此代码添加到您的 Car
模型中:
protected $appends = ['age'];
protected function getAgeAttribute()
{
return $this->condition->age;
}
但一定要 eager load condition
与您的 Car
模型一起避免 N + 1 查询问题。
$cars = Car::with('condition')->get();
在您的情况下,您可以默认加载 将此行添加到您的 Car
模型:
protected $with = ['condition'];
顺便说一句,您在 Car
模型上的关系应该是这样的:
public function condition()
{
return $this->morphOne(Condition::class, 'carable');
}
我有 2 个模型:Car 和 Condition
Car 和 Condition 具有一对一的多态关系。条件加入到汽车上:
class Car extends Model
{
// ...
public function condition()
{
return $this->morphOne(Condition::class, 'carable');
}
}
class Condition extends Model
{
// ...
public function carable()
{
return $this->morphTo()
}
}
这个return结构如下:
{ // car
"id": 1,
"condition": {
"age": "1 year",
"serviced": "yes"
}
}
我还想 return 汽车等级的 age
属性,即
{ // car
"id": 1,
"age": "1 year",
"condition": {
"age": "1 year",
"serviced": "yes"
}
}
我想通过获取汽车模型中的条件->年龄属性来完成此操作。我尝试在 Car class:
中设置以下内容protected $appends = ["age"];
protected function getAgeAttribute()
{
return $this->getFinancialAttribute()->getAgeAttribute();
}
以及它的一些其他变体,但没有成功。有什么办法让我优雅地做到这一点?
您可以尝试将此代码添加到您的 Car
模型中:
protected $appends = ['age'];
protected function getAgeAttribute()
{
return $this->condition->age;
}
但一定要 eager load condition
与您的 Car
模型一起避免 N + 1 查询问题。
$cars = Car::with('condition')->get();
在您的情况下,您可以默认加载 将此行添加到您的 Car
模型:
protected $with = ['condition'];
顺便说一句,您在 Car
模型上的关系应该是这样的:
public function condition()
{
return $this->morphOne(Condition::class, 'carable');
}