Laravel 5 Laravel-从关系中获取价值';s属性作为当前模型的属性
我有两种型号:汽车和空调 Car和条件具有1:1多态关系。条件连接到汽车上: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
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这是一个打字错误,正在更新