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