Laravel:雄辩“加入”,如何只获得被推荐表的属性

时间:2016-11-07 18:58:26

标签: laravel eloquent

我有一个模型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:我不能使用查询构建器,因为我需要那个雄辩的模型。

4 个答案:

答案 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();