我有一个型号为A
和一个型号B
。
我建立了它们之间的关系,所以我可以做A->B->属性。
但现在我面临一些问题。
我需要进行一个查询,只得到B->属性,而不是B对象。
所以我用这个:
A::with(['B'])->get()
但是,在a中得到一个称为B的性质,具有完整的B模型。有没有实现这样的目标。
A::with(['B->property'])->get()
因此,在A
内部的B属性中,我得到了B->property
,而不是B
对象。
有可能吗?
附言:我不能使用查询生成器,因为我需要那个雄辩的模型。
我认为这篇文章将帮助您:http://laraveldaily.com/why-use-appends-with-accessors-in-eloquent/
你可以把模型中的$appends = ['property']
,以便将property
字段添加到模型中。
然后,通过模型中的访问器方法,您可以描述如何填充该字段(即:通过关系使用另一个模型中的字段(。
这似乎应该给你想要的。
尝试以下代码
在您的A
型号中:
protected $appends = ['property'];
public function B()
{
return $this->hasOne('AppB');
}
public function getPropertyAttribute()
{
return $this->B()->property;
}
那么CCD_ 9将给你CCD_。根据您的要求更改model
名称和property
名称。
@shoieb0101的回答对我不起作用,因为我有belongsTo
关系,而不是hasOne
关系。如果您也遇到这种情况,您只需要修改访问器函数,如下所示。
protected $appends = ['property'];
public function B()
{
return $this->belongsTo('AppB');
}
public function getPropertyAttribute()
{
return $this->B()->first()->property;
}
注意:我在中添加了->first()
,因为belongsTo
返回一个结果数组,但我们只能从单个结果中获得属性。
您应该能够约束eagerloaded查询:
尝试
A::with(["B" => function($query){
$query->select('property');
}])->get();