Select custom columns from Laravel belongsToMany relation

巧了我就是萌 提交于 2019-12-01 05:29:19

问题


Im trying to select only specific attributes on the many-to-many relation users, just like in one-to-one. But using select() on belongsToMany() seem to be ignored and i'm still getting all the User attributes.

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

Is there a way of filtering only specified columns from related entity with belongsToMany()?


回答1:


Yes, you actually can.

Computer::with("users")->get(array('column_name1','column_name2',...));

Be careful though if you have the same column name for both tables linked by your pivot table. In this case, you need to specify the table name in dot notation, tableName.columnName. For example if both users and computer has a column name id, you need to do :

Computer::with("users")->get(array('users.id','column_name2',...));



回答2:


According to Taylor Otwell it is not currently possible: https://github.com/laravel/laravel/issues/2679

I have tried to use a lists('user.email') at the end of the query but I can't make it work.




回答3:


Computer::with(["users" => function($query){
$query->select('column1','column2','...');
}])->get();


来源:https://stackoverflow.com/questions/23709936/select-custom-columns-from-laravel-belongstomany-relation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!