首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 6:批量插入与批量插入关系

Laravel 6:批量插入与批量插入关系
EN

Stack Overflow用户
提问于 2020-07-05 05:53:57
回答 1查看 2.5K关注 0票数 0

我有itinerariesmealsitinerary_meal桌。

Itinerariesmeals表有很多到多个关系。

在使用dd($request->all())时,它为我提供了以下值:

代码语言:javascript
复制
"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"
      ]
    ]

我可以大量插入日程安排如下:

代码语言:javascript
复制
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。另外,我没有得到产品行程的模型,所以无法节省使用餐()关系

有没有解决大容量插入模型及其关系的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-07 06:34:22

我已经对数据的结构和表/列名称做了一些假设,请告诉我,这样做是否实现了正在寻找的大容量插入:

代码语言:javascript
复制
$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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62737340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档