首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Eloquent循环数组并添加到DB - Laravel/Eloquent

Eloquent循环数组并添加到DB - Laravel/Eloquent
EN

Stack Overflow用户
提问于 2016-02-05 19:51:43
回答 1查看 523关注 0票数 1

我刚刚开始使用eloquent wand,我将通过angularJS将以下对象发送到我的后端

代码语言:javascript
复制
item:
     {
        id: 1, 
        cookie_id: "c312b3faf70d3bc39b9563b340a1094bf6f58891", 
        user_id: null, 
        restaurant_id: 11, 
        restaurant_name: "Gaucho",
        restaurant_uname: "gaucho",
        city: "abuja",
        location: "asokoro",
        time: "12:45:00",
        updated_at: "2016-02-05 11:37:05",
        created_at: "2016-02-05 10:50:48",
        cart_items: [
          "id": 159,
          "name": "Empanadas (Choice of 2)",
          "description": "Choice of Diced Beef; Spinach, Stilton and Onion; or Smoked Ham and Mozzarella",
          "price": 700,
          "available": 1,
          "created_at": "2016-01-31 16:50:31",
          "updated_at": "2016-01-31 16:50:31",
          "menu_category_id": 41,
          "restaurant_id": 11,
          "cart_modifier_items": [
              {
                  "id": 34,
                  "name": "Diced Beef",
                  "price": 0,
                  "created_at": "2016-02-01 01:04:08",
                  "updated_at": "2016-02-01 01:04:08",
                  "menu_modifier_group_id": 9,
                  "restaurant_id": 11,
                  "menu_item_id": 159,
                  "selected": true
              },
              {
                  "id": 35,
                  "name": "Smoked Salmon & Mozzarella",
                  "price": 0,
                  "created_at": "2016-02-01 01:04:37",
                  "updated_at": "2016-02-01 01:04:37",
                  "menu_modifier_group_id": 9,
                  "restaurant_id": 11,
                  "menu_item_id": 159,
                  "selected": true
              }
            ]
        ]
    }

如您所见,我有一个包含多个cart_itemsparent项,这些cart_items又包含多个cart_modifier_items

我的机型详情(3张表);

代码语言:javascript
复制
Cart 
hasMany cart_items

CartItem 

belongsTo Cart
hasMany cart_modifier_items

CartModifierItem

belongsTo CartItem

如何接受此项通过cart_itemscart_modifier_items进行添加和循环,并使用eloquent将其添加到表中

cart to cart Table all cart_items to cart_items Table all cart_modifier_items to the cart_modifier_items Table

我想我需要3个独立的DB请求?

如有任何建议/指导,欢迎光临。

这就是我到目前为止所做的;

代码语言:javascript
复制
public function addItem (Request $request) {

    $item = $request->input('item');
    $rest_id = $request->input('id');
    $cookie_id = $request->input('basket');

    $cart = Cart::where(['cookie_id' => $cookie_id, 'restaurant_id' => $rest_id])->get();
    $cart_id = $cart->id;

    $cart_items = $item['cart_items'];
    foreach($cart_items as $cart_item) {

        CartItem::create([
            'item_id' => $cart_item['id'],
            'restaurant_id' => $cart_item['restaurant_id'],
            'name' => $cart_item['name'],
            'description' => $cart_item['description'],
            'price' => $cart_item['price'],
            'qty' => $cart_item['qty'],
            'available' => $cart_item['available'],
            'cart_id' => $cart_id,
            'cart_cookie' => $cookie_id,
        ]);
    }
    $cart_modifier_items = $cart_items['cart_modifier_items'];

    foreach($cart_modifier_items as $cart_modifier_item) {

        CartModifierItem::create([
            'item_id' => $cart_modifier_item['id'],
            'cart_item_id' => $cart_modifier_item['menu_item_id'],
            'name' => $cart_modifier_item['name'],
            'price' => $cart_modifier_item['price'],
            'cart_id' => $cart_id,
        ]);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2016-02-05 22:04:53

首先,确保您的字段在各自模型的可填充数组中。

代码语言:javascript
复制
// let save the item Record
// am seeing an id in the object so lets update if id exist or 
// create if it does not

 $id = isset($request->input('item.id')) ? $request->input('item.id') : null;
 $cart = Cart::updateOrCreate(['id'=>$id],$request->input('item'))

// now let save or update cart_items
foreach($request->input('item.cart_items') as $cart_item){
   $cart_item_id = isset($cart_item['id']) ? $cart_item['id'] : null;
   $cartItem = $cart->cart_items()->updateOrCreate(['id'=>$cart_item_id],$cart_item);

   // now let save for cart_modifier_items
   foreach($cart_item['cart_modifier_items'] as $cart_modifier_item){
      $cart_modifier_item_id = isset($cart_modifier_item['id']) ? $cart_modifier_item['id'] : null;
      $cartModifierItem = $cartItem->cart_modifier_items()->updateOrCreate(['id'=>$cart_modifier_item_id],$cart_modifier_item);
   }

}

您已经了解了如何遍历记录并更新或创建记录。接下来您可能会遇到的唯一问题是如何处理已从前端删除/移除的已保存数据。这要由你来处理。干杯。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35223534

复制
相关文章

相似问题

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