Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Select 从Laravel belongsToMany关系中选择自定义列_Select_Laravel_Many To Many_Eloquent - Fatal编程技术网

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

Select 从Laravel belongsToMany关系中选择自定义列,select,laravel,many-to-many,eloquent,Select,Laravel,Many To Many,Eloquent,我试图只选择多对多关系用户上的特定属性,就像一对一中一样。但是在belongtomany()上使用select()似乎被忽略了,我仍然得到了所有的用户属性 class Computer extends Eloquent { public function users() { return $this->belongsToMany("User")->select("email"); } public function admin() {

我试图只选择多对多关系
用户
上的特定属性,就像一对一中一样。但是在
belongtomany()
上使用
select()
似乎被忽略了,我仍然得到了所有的用户属性

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

是否有一种方法可以使用
belongToMany()
,仅从相关实体中筛选指定的列

根据Taylor Otwell的说法,目前不可能:

我尝试在查询结束时使用
列表('user.email')
,但我无法使其工作。

是的,您可以

但是,如果数据透视表链接的两个表的列名相同,请小心。在这种情况下,需要以点表示法指定表名,
tableName.columnName
。例如,如果用户和计算机都有列名
id
,则需要执行以下操作:

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

它的工作原理是这样的,您有什么版本?我目前正在运行4.1,那么
用户
关系的输出是什么?它返回所有用户属性,而不仅仅是
select()
所需的属性。
select()
中定义的任何字段都只是查询检索相关实体的前置字段,如
select email,users.*.…
Ok,您是对的。我在我调整过的
belongtomany
上测试了这一点,但没有这样的问题。作为PR发送了这个调整,检查你是否希望它不起作用。返回$data_collect=DataCollect::whereCampaignId($campaignId)->with('options')->get(['title']);这只是返回标题,选项关系返回为空。当我拿出['title']时,选项又回来了。你能详细说明你的答案并解释一下这是怎么回事吗?
Computer::with("users")->get(array('users.id','column_name2',...));
Computer::with(["users" => function($query){
$query->select('column1','column2','...');
}])->get();