当我急切地加载直接的口才关系时,我可以使用以下语法来限制检索到的列:
MyModel::with(myRelation:id,col_2,col_3);
当我想约束关系成员时,请执行以下操作:
MyModel::with(['myRelation' => function ($query) {
$query->where([
['field_1', 'a_value'],
['field_2', 'b_value']
]);
}]);
但这会加载相关模型的所有列。我尝试用完整的语法myRelation
替换键myRelation:id,col_2,col_3
,但是会引发错误,提示找不到关联名称。
我还尝试将以下方法添加到$query
:
->select('id', 'col_2', 'col_3')
或
->addSelect('id', 'col_2', 'col_3')
或
->get('id', 'col_2', 'col_3')
这些都不成功。
答案 0 :(得分:0)
一种选择可能是使原始模型MyRelation
所指向的所有列(id,col_2,col_3除外)都隐藏。
protected $hidden = ['col_4', 'col_5',...];
您还可以在模型MyModel
中更改关系定义:
public function myRelation()
{
return $this->belongsTo('MyRelation')->select(array('id', 'col_2', 'col_3'));
}
但是,一般来说,这应该可行:
MyModel::with(array('myRelation'=>function($query){
$query->select('id','col_2', 'col_3)
->where([
['field_1', 'a_value'],
['field_2', 'b_value']
]);
}))->get();
请记住,您必须在上面的选择列表中包括加入密钥(例如id
)。
答案 1 :(得分:0)
好,因此要使其正常工作,我必须:
将参数作为数组传递给select语句,如下所示:
-> select([['id','foreign_key','col3','col4'])