【发布时间】:2019-04-06 19:23:38
【问题描述】:
我必须在 OneToMany relashionship 中建模,并且我已经完成了 ORM 查询以得到嵌套结构中的结果,如下所示:$u->userGroups()->with('space')->get(),我得到了以下结果:
Illuminate\Database\Eloquent\Collection {#3158
all: [
App\UserGroup {#3142
role: "CONTRIBUTORS",
updated_at: "2019-04-06 16:38:43",
name: "Contributeurs",
created_at: "2019-04-06 16:38:43",
slug: "contributeurs",
id: 789,
space: App\Space {#3180
country: "Congo-Kinshasa",
address: "40 rue Zozo",
visibility: "public",
town: "Kinshasa",
updated_at: "2019-04-06 16:38:42",
name: "Christian Lisangola",
logo: "spaces/48fcacca888f0b35235b9edda371554dcfc2afc0.png",
created_at: "2019-04-06 16:38:42",
zip_code: "5767",
slug: "christian-lisangola",
id: 850,
},
},
App\UserGroup {#3145
role: "AUTHORS",
updated_at: "2019-04-06 16:38:43",
name: "Auteurs",
created_at: "2019-04-06 16:38:43",
slug: "auteurs",
id: 788,
space: App\Space {#3185
country: "Congo-Kinshasa",
address: "40 rue Luiss",
visibility: "public",
town: "Kinshasa",
updated_at: "2019-04-06 16:38:42",
name: "Christian Lisangola",
logo: "spaces/48fcacca888f0b35235b9edda371554dcfc2afc0.png",
created_at: "2019-04-06 16:38:42",
zip_code: "5767",
slug: "christian-lisangola",
id: 850,
},
},
App\UserGroup {#3148
role: "ADMINISTRATORS",
updated_at: "2019-04-06 16:37:37",
name: "Administrateurs",
created_at: "2019-04-06 16:37:37",
slug: "administrateurs",
id: 848,
space: App\Space {#3170
country: "États-Unis",
address: "100 avenue zazi",
town: "Houston",
visibility: "on_demand",
updated_at: "2019-04-06 16:37:37",
name: "US",
logo: "spaces/8490c3a93d32951d3d8d0ade7c459c70b202c342.png",
created_at: "2019-04-06 16:37:37",
zip_code: "33234",
slug: "us",
id: 766,
},
},
App\UserGroup {#3151
role: "ADMINISTRATORS",
updated_at: "2019-04-06 16:37:11",
name: "Administrateurs",
created_at: "2019-04-06 16:37:11",
slug: "administrateurs",
id: 765,
space: App\Space {#3175
country: "États-Unis",
address: "100 avenue zozo",
town: "Houston",
visibility: "private",
updated_at: "2019-04-06 16:37:11",
name: "Lims INC",
logo: "spaces/4f1c5ac285bbc38919133b83de58ac1f7802fea4.png",
created_at: "2019-04-06 16:37:11",
type: "private",
zip_code: "343",
slug: "lims-inc",
id: 844,
},
},
App\UserGroup {#3154
role: "ADMINISTRATORS",
updated_at: "2019-04-06 16:36:33",
name: "Administrateurs",
created_at: "2019-04-06 16:36:33",
slug: "administrateurs",
id: 1,
space: App\Space {#3165
country: "États-Unis",
address: "100 avenue zozo",
visibility: "public",
town: "Houston",
updated_at: "2019-04-06 16:36:33",
name: "Gravity",
logo: "spaces/4dab5e2bf8d8725b05186b9d574f8c98640526d9.png",
created_at: "2019-04-06 16:36:33",
zip_code: "111",
slug: "gravity",
id: 0,
},
},
],
我想要一个结构,其中我有一个这种格式的配对键值数组:["space.id"=>"role"],如果对于给定的space.id,它们的键是重复的,它应该创建一个像这样的数组['space.id'=>[role1,role2]] .为了解决这个问题,我在 Laravel 集合上使用了 pluck 方法。但是有两个主要问题。
前一个数组的结果保存在$result 变量中。在该变量上,我调用了这样的 pluck 方法:$result->pluck('role','space.id')->all() 然后我得到了这个:
[
850 => "AUTHORS",
766 => "ADMINISTRATORS",
844 => "ADMINISTRATORS",
0 => "ADMINISTRATORS",
]
首先,当我在修补程序中执行此操作时,一切正常。但是当我将结果以 json 格式发送到 front-end 时,space.id 不会出现,这就是如何它照顾ajax call:
[
"0" => "AUTHORS",
"1" => "ADMINISTRATORS",
"2" => "ADMINISTRATORS",
"3" => "ADMINISTRATORS",
]
所以,我不知道为什么原来的space.id 不存在。
第二个问题:如果你仔细查看第一个数组 space.id 850 它重复了两次,对于 CONTRIBUTORS 和 AUTHORS,所以它不支持 duplicate keys 并且它采用了最新的值同样的key 850。但是我想要的是这样的重复键:
[
850 => ["CONTRIBUTORS","AUTHORS"],//Take the 2 instead of only keep the latest value
766 => "ADMINISTRATORS",
844 => "ADMINISTRATORS",
0 => "ADMINISTRATORS",
]
但我没有任何解决办法。谢谢
【问题讨论】:
-
对于具有相同 id 的重复值,它似乎使用
groupByid 列..搜索此