在为每个查询定义关系时,选择列

时间:2016-08-12 23:32:44

标签: laravel eloquent eager-loading

如何在为每个查询定义关注到预先加载的关系时选择要加载哪些列?

以下似乎无效:

class Partner extends Model
{
    protected $with = [
        'statistics',
        'event' => function($query)
        {
            $query->select(['id', 'name']);
        }
    ];
}

感谢。

1 个答案:

答案 0 :(得分:0)

$with用于指定每个查询必须加载的关系,而不是指定可见列。
要指定可见列,即应包含在查询中的列,您可以使用$visible

protected $visible = ['id','name'];

额外:

您可以使用$hidden来指示laravel隐藏列 例如,您想要隐藏特定列。

protected $hidden = [
        'password', 'remember_token',
    ];

或者,在您的关系方法中,您可以使用Select()方法来定义应包含在该特定关系中的列。
Select()方法接受要选择的字段数组。 这是强制性的 包括定义两个表之间关系的键(列名)。
例如,假设您有两个具有一对一关系的模型A和B,那么您可以执行以下操作。

public function A(){
        return $this->belongsTo('App\Models\B')->Select(['id','name']);
    }