Мне нужно моделировать в 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]]
.Toпопытаться устранить проблему, которую я использовал в коллекциях Laravel, используя метод pluck. Но есть 2 основные проблемы.Результат предыдущего массива был сохранен в переменной $result
. И для этой переменной я назвал метод pluck следующим образом: $result->pluck('role','space.id')->all()
, затем я получил это:
[
850 => "AUTHORS",
766 => "ADMINISTRATORS",
844 => "ADMINISTRATORS",
0 => "ADMINISTRATORS",
]
First ofвсе, когда я делаю это в тинкере, все идет хорошо. Но когда я помещаю результат в 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",
]
Но у меня нет никакого решения. Спасибо