如何在急切加载时仅选择某些列

时间:2014-09-07 06:33:38

标签: laravel-4

是否有办法在laravel中进行预先加载时只选择某些列?

$columns = ['col_1', 'col_2', 'col_3'];
$model = MyModel::findOrFail(Input::get('id'), $columns);
$model->load('position');

在我的模型中,我定义了:

public function position() {
    return $this->belongsToMany('Position', 'mymodel_positions')->withTimestamps();
}

当我没有提供像MyModel :: findOrFail(id)这样的$ columns参数时。职位是 正确加载。但是,如果我提供$ columns,则位置总是空的。

我想要什么:急切地加载关系并指定列(不是加载关系中的列)。我确定这是可能的,但我根本就没有得到它......

希望得到你的帮助。

1 个答案:

答案 0 :(得分:2)

<强> tldr;您始终需要SELECT主键和关系的相应外键。

最有可能的是:

$columns = ['col_1', 'col_2', 'col_3'];

不包含模型的主键,因此Eloquent无法匹配相关模型。

话虽如此,你所需要的只是:

$columns = ['id', 'col_1', 'col_2', 'col_3'];

或任何字段是主键。