拉拉维尔:雄辩"join",如何只获取引用表的一个属性



我有一个型号为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();

最新更新