我试图仅选择多对多关系users
上的特定属性,就像在一对一中一样。但是在select()
上使用belongsToMany()
似乎被忽略了,而且我仍然获得了所有用户属性。
class Computer extends Eloquent {
public function users() {
return $this->belongsToMany("User")->select("email");
}
public function admin() {
return $this->hasOne("User")->select("email");
}
}
Computer::with("users")->get();
是否有办法仅使用belongsToMany()
过滤来自相关实体的指定列?
答案 0 :(得分:3)
是的,你actually can。
Computer::with("users")->get(array('column_name1','column_name2',...));
但是,如果您的数据透视表链接的两个表具有相同的列名,请注意。在这种情况下,您需要以点表示法tableName.columnName
指定表名。例如,如果用户和计算机都有列名id
,则需要执行以下操作:
Computer::with("users")->get(array('users.id','column_name2',...));
答案 1 :(得分:1)
根据Taylor Otwell的说法,目前不可能:https://github.com/laravel/laravel/issues/2679
我尝试在查询结尾处使用lists('user.email')
,但我无法使其发挥作用。
答案 2 :(得分:0)
Computer::with(["users" => function($query){
$query->select('column1','column2','...');
}])->get();