我有一个模型let values = ["Saab", "Volvo", "BMW"]; // example
values.sort();
values.reverse();
和一个模型A
。
我建立了他们之间的关系,所以我可以做A-> B->属性。
但现在我遇到了一些问题。
我需要进行查询并仅获取B->属性,而不是B对象。
所以我用这个:
B
然后在A中获得一个名为B的属性,其中包含完整的B模型。 无论如何都要实现这样的目标。
A::with(['B'])->get()
然后在A::with(['B->property'])->get()
内的B属性中,我得到A
而不是B->property
对象。
有可能吗?
PS:我不能使用查询构建器,因为我需要那个雄辩的模型。
答案 0 :(得分:2)
我认为这篇文章会帮助你: http://laraveldaily.com/why-use-appends-with-accessors-in-eloquent/
你可以放
模型中的$appends = ['property']
可以为模型添加property
字段。
然后,使用模型中的访问器方法,您可以描述如何填充该字段(即:通过关系使用来自另一个模型的字段)。
似乎应该给你你想要的东西。
答案 1 :(得分:1)
尝试以下代码
在A
模型中:
protected $appends = ['property'];
public function B()
{
return $this->hasOne('\App\B');
}
public function getPropertyAttribute()
{
return $this->B()->property;
}
然后A->property
会给你B->property
。根据您的要求更改model
名称和property
名称。
答案 2 :(得分:1)
@ shoieb0101的answer对我不起作用,因为我有一个belongsTo
关系而不是hasOne
。如果您也是这种情况,则只需修改访问器功能,如下所示。
protected $appends = ['property'];
public function B()
{
return $this->belongsTo('\App\B');
}
public function getPropertyAttribute()
{
return $this->B()->first()->property;
}
注意:我添加了->first()
,因为belongsTo
返回了一个结果数组,但是我们只能从单个结果中获取属性。
答案 3 :(得分:0)
您应该能够约束加载的查询:
试
A::with(["B" => function($query){
$query->select('property');
}])->get();