Laravel 5 Laravel-从关系中获取价值';s属性作为当前模型的属性

Laravel 5 Laravel-从关系中获取价值';s属性作为当前模型的属性,laravel-5,eloquent,eloquent-relationship,Laravel 5,Eloquent,Eloquent Relationship,我有两种型号:汽车和空调 Car和条件具有1:1多态关系。条件连接到汽车上: class Car extends Model { // ... public function condition() { return $this->morphOne(Condition::class, 'carable'); } } class Condition extends Model { // ... public functi

我有两种型号:汽车和空调

Car和条件具有1:1多态关系。条件连接到汽车上:

class Car extends Model 
{
    // ...

    public function condition()
    {
        return $this->morphOne(Condition::class, 'carable');
    }
}

class Condition extends Model
{
    // ...

    public function carable()
    {
        return $this->morphTo()
    }
}
这将返回以下结构:

{ // car
    "id": 1,
    "condition": {
        "age": "1 year",
        "serviced": "yes"
    }
}
我还想返回汽车级别的
age
属性,即

{ // car
    "id": 1,
    "age": "1 year",
    "condition": {
        "age": "1 year",
        "serviced": "yes"
    }
}
我想通过在汽车模型中获取condition->age属性来实现这一点。我尝试在汽车课程中设置以下内容:

protected $appends = ["age"];
protected function getAgeAttribute()
{
    return $this->getFinancialAttribute()->getAgeAttribute();
}

以及其他一些变化,但没有成功。有什么方法可以让我优雅地做到这一点吗?

您可以尝试将此代码添加到您的
车型中:

protected$appends=['age'];
受保护的函数getAgeAttribute()
{
返回$this->condition->age;
}
但是一定要对您的
汽车
模型设置
条件
,以避免N+1查询问题

$cars=Car::with('condition')->get();
在您的情况下,您可以在默认情况下将该行添加到您的
车型中

protected$with=['condition'];
顺便说一句,您在
车型上的关系应该是这样的:

公共功能条件()
{
返回$this->morphOne(条件::class,'carable');
}

这让hella很沮丧-我确信我做得很正确,但我取消了我的更改,并一步一步地遵循您的更改,它们成功了,谢谢!关于关系-我只是很快地把它们打出来(公司的政策是在这里和其他地方询问时重命名类名等),所以这只是一种类型,关系已经很好地工作了,但会更新我原来的帖子!是的,我在评论后理解这只是一个输入错误,因为你发布了正确的json结果。这就是我为什么回答的原因。@dparoli这是一个打字错误,正在更新