Laravel 6:具有批量插入关系的批量插入
Laravel 6: Bulk Insert With Bulk Insert Relation
我有 table itineraries
、meals
和 itinerary_meal
。
Itineraries
与 meals
table.
有多对多关系
在 dd($request->all())
时,它为我提供了值:
"product_itineraries" => array:3 [▼
1 => array:6 [▼
"itinerary_title_en" => "123123"
"itinerary_title_th" => "123123"
"day_number" => "1"
"itinerary_description_en" => null
"itinerary_description_th" => null
"meal_type_id" => array:3 [▼
0 => "1"
1 => "2"
2 => "3"
]
]
我可以像这样批量插入行程:
foreach ($request->product_itineraries as $product_itinerariesKey => $product_itineraries) {
if (empty($product_itineraries)) {
continue;
}
$productItineraryData[$product_itinerariesKey]['meal_type_id'] = $product_itineraries['meal_type_id'];
$productItineraryData[$product_itinerariesKey]['product_id'] = $product->id;
$productItineraryData[$product_itinerariesKey]['itinerary_title_en'] = $product_itineraries['itinerary_title_en'];
$productItineraryData[$product_itinerariesKey]['itinerary_title_th'] = $product_itineraries['itinerary_title_th'];
$productItineraryData[$product_itinerariesKey]['day_number'] = $product_itineraries['day_number'];
$productItineraryData[$product_itinerariesKey]['itinerary_description_en'] = $product_itineraries['itinerary_description_en'];
$productItineraryData[$product_itinerariesKey]['itinerary_description_th'] = $product_itineraries['itinerary_description_th'];
$productItineraryData[$product_itinerariesKey]['created_at'] = $nowTime;
$productItineraryData[$product_itinerariesKey]['updated_at'] = $nowTime;
}
if (!empty($productItineraryData) && count($productItineraryData) > 0) {
ProductItinerary::insert($productItineraryData);
}
使用它,我现在无法批量插入相关的 meal_type,因为我没有获得 产品行程 ID。
此外,我没有获得产品行程模型,因此无法使用 meals() 关系进行保存
有没有解决bulk insert模型及其关系的方法?
我对您的数据结构和 table/column 名称做了一些假设,请告诉我这是否实现了您正在寻找的批量插入:
$itineraries = [];
$relatedMeals = [];
foreach ($request->product_itineraries as $product_itinerariesKey => $product_itineraries) {
if (empty($product_itineraries)) {
continue;
}
$itinerary['product_id'] = $product->id;
$itinerary['itinerary_title_en'] = $product_itineraries['itinerary_title_en'];
$itinerary['itinerary_title_th'] = $product_itineraries['itinerary_title_th'];
$itinerary['day_number'] = $product_itineraries['day_number'];
$itinerary['itinerary_description_en'] = $product_itineraries['itinerary_description_en'];
$itinerary['itinerary_description_th'] = $product_itineraries['itinerary_description_th'];
$itinerary['created_at'] = $nowTime;
$itinerary['updated_at'] = $nowTime;
$itineraries[] = $itinerary;
$relatedMeals[] = $product_itineraries['meal_type_id'];
}
DB::beginTransaction();
try {
$itineraryId = ProductItinerary::sharedLock()->max('id') + 1;
ProductItinerary::insert($itineraries);
$relations = [];
foreach ($relatedMeals as $mealIds) {
foreach ($mealIds as $mealId) {
$relations[] = [
'product_itinerary_id' => $itineraryId,
'meal_id' => $mealId,
];
}
$itineraryId++;
}
DB::table('product_itinerary_meal')->insert($relations);
DB::commit();
} catch(Exception $e) {
DB::rollback();
throw $e;
}
我有 table itineraries
、meals
和 itinerary_meal
。
Itineraries
与 meals
table.
在 dd($request->all())
时,它为我提供了值:
"product_itineraries" => array:3 [▼
1 => array:6 [▼
"itinerary_title_en" => "123123"
"itinerary_title_th" => "123123"
"day_number" => "1"
"itinerary_description_en" => null
"itinerary_description_th" => null
"meal_type_id" => array:3 [▼
0 => "1"
1 => "2"
2 => "3"
]
]
我可以像这样批量插入行程:
foreach ($request->product_itineraries as $product_itinerariesKey => $product_itineraries) {
if (empty($product_itineraries)) {
continue;
}
$productItineraryData[$product_itinerariesKey]['meal_type_id'] = $product_itineraries['meal_type_id'];
$productItineraryData[$product_itinerariesKey]['product_id'] = $product->id;
$productItineraryData[$product_itinerariesKey]['itinerary_title_en'] = $product_itineraries['itinerary_title_en'];
$productItineraryData[$product_itinerariesKey]['itinerary_title_th'] = $product_itineraries['itinerary_title_th'];
$productItineraryData[$product_itinerariesKey]['day_number'] = $product_itineraries['day_number'];
$productItineraryData[$product_itinerariesKey]['itinerary_description_en'] = $product_itineraries['itinerary_description_en'];
$productItineraryData[$product_itinerariesKey]['itinerary_description_th'] = $product_itineraries['itinerary_description_th'];
$productItineraryData[$product_itinerariesKey]['created_at'] = $nowTime;
$productItineraryData[$product_itinerariesKey]['updated_at'] = $nowTime;
}
if (!empty($productItineraryData) && count($productItineraryData) > 0) {
ProductItinerary::insert($productItineraryData);
}
使用它,我现在无法批量插入相关的 meal_type,因为我没有获得 产品行程 ID。 此外,我没有获得产品行程模型,因此无法使用 meals() 关系进行保存
有没有解决bulk insert模型及其关系的方法?
我对您的数据结构和 table/column 名称做了一些假设,请告诉我这是否实现了您正在寻找的批量插入:
$itineraries = [];
$relatedMeals = [];
foreach ($request->product_itineraries as $product_itinerariesKey => $product_itineraries) {
if (empty($product_itineraries)) {
continue;
}
$itinerary['product_id'] = $product->id;
$itinerary['itinerary_title_en'] = $product_itineraries['itinerary_title_en'];
$itinerary['itinerary_title_th'] = $product_itineraries['itinerary_title_th'];
$itinerary['day_number'] = $product_itineraries['day_number'];
$itinerary['itinerary_description_en'] = $product_itineraries['itinerary_description_en'];
$itinerary['itinerary_description_th'] = $product_itineraries['itinerary_description_th'];
$itinerary['created_at'] = $nowTime;
$itinerary['updated_at'] = $nowTime;
$itineraries[] = $itinerary;
$relatedMeals[] = $product_itineraries['meal_type_id'];
}
DB::beginTransaction();
try {
$itineraryId = ProductItinerary::sharedLock()->max('id') + 1;
ProductItinerary::insert($itineraries);
$relations = [];
foreach ($relatedMeals as $mealIds) {
foreach ($mealIds as $mealId) {
$relations[] = [
'product_itinerary_id' => $itineraryId,
'meal_id' => $mealId,
];
}
$itineraryId++;
}
DB::table('product_itinerary_meal')->insert($relations);
DB::commit();
} catch(Exception $e) {
DB::rollback();
throw $e;
}