所以我在注意力和服務/程式之間有多對多的關系一個病人有很多注意力,一個注意力屬于一個病人。
當我播種注意程式(多對多關系)時,問題就來了
我根據 laravel 檔案轉換資料,我正在使用集合。
$procedures = Procedure::all()->mapWithKeys(function ($procedure,$key) {
return [$procedure['id'] => [
'price' => $procedure['price'],
'price_USD' => $procedure['price_USD'],
'amount' => rand(1, 10),
]];
});
那應該回傳一個值-鍵對,其中陣列鍵是程序ID。
但是當我嘗試將程式附加到 attetions 時
$attention->procedures()->attach($procedures->random(rand(1,10))->all());
遷移會引發錯誤。
除錯一段時間后,這是ray拋出的
程式:
array:3 [▼
0 => array:3 [▼
"price" => 439.39
"price_USD" => 17.87
"amount" => 1
]
1 => array:3 [▼
"price" => 287.39
"price_USD" => 11.69
"amount" => 4
]
2 => array:3 [▼
"price" => 0.68
"price_USD" => 0.03
"amount" => 8
]
]
詢問:
insert into
`attention_procedure` (
`amount`,
`attention_id`,
`price`,
`price_USD`,
`procedure_id`
)
values
(8, 1, 651.72, 26.51, 0),
(10, 1, 403.18, 16.4, 1),
(10, 1, 629.08, 25.59, 2),
(10, 1, 930.84, 37.86, 3),
(6, 1, 330.7, 13.45, 4),
(5, 1, 629.53, 25.61, 5),
(2, 1, 241.81, 9.84, 6),
(10, 1, 354.68, 14.43, 7)
正如您所看到的,它試圖插入 0 作為程序 ids 之一,但它并不存在。
我怎樣才能使集合回傳程序 id 作為陣列鍵?
uj5u.com熱心網友回復:
我認為這沒mapWithKeys問題,random但當你這樣做時,它只會得到值:
->attach($procedures->random(rand(1,10))->all())
嘗試在查詢中獲取一些隨機記錄并映射它們:
$procedures = Procedure::inRandomOrder()->limit(rand(1,10))->get()
->mapWithKeys(function ($procedure,$key) {
return [$procedure['id'] => [
'price' => $procedure['price'],
'price_USD' => $procedure['price_USD'],
'amount' => rand(1, 10),
]];
})
->toArray();
然后插入它們:
$attention->procedures()->attach($procedures);
這樣,您還將減輕資料庫和 php 的作業,因為要處理的記錄會更少。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/461956.html
下一篇:Laravel背包
