从Laravel belongsToMany关系中选择自定义列

时间:2014-05-17 09:56:38

标签: select laravel many-to-many eloquent

我试图仅选择多对多关系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()过滤来自相关实体的指定列?

3 个答案:

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