2016-02-13 62 views
0

我很難檢索一個Eloquent模型,並通過它,然後將其添加到另一個表。重申通過數組並添加到數據庫 - Laravel/Eloquent/PHP

所以這裏是我的查詢;

$cart = Cart::with('cartItems','cartItems.cartModifierItems')->where(['vcode' => $code, 'cookie_id' => $cookie])->first(); 

這將檢索下面;

[ 
    { 
    "id": 14, 
    "cookie_id": "2e5c22eba9ef7affe78b34e10d35f89dd5fbdd3b", 
    "user_id": 3, 
    "restaurant_id": 11, 
    "restaurant_name": "Gaucho", 
    "restaurant_uname": "gaucho", 
    "location": "asokoro", 
    "city": "abuja", 
    "date": "2016-02-11", 
    "time": "12:00:00", 
    "vcode": "5960010", 
    "created_at": "2016-02-09 13:57:34", 
    "updated_at": "2016-02-13 02:29:56", 
    "cart_items": [ 
     { 
     "id": 88, 
     "item_id": 159, 
     "restaurant_id": 11, 
     "cart_cookie": "2e5c22eba9ef7affe78b34e10d35f89dd5fbdd3b", 
     "name": "Empanadas (Choice of 2)", 
     "description": "Choice of Diced Beef; Spinach, Stilton and Onion; or Smoked Ham and Mozzarella", 
     "price": 700, 
     "qty": 5, 
     "available": 1, 
     "created_at": "2016-02-10 20:42:32", 
     "updated_at": "2016-02-11 07:07:51", 
     "cart_id": 14, 
     "cart_modifier_items": [ 
      { 
      "id": 76, 
      "item_id": 34, 
      "name": "Diced Beef", 
      "price": 50, 
      "created_at": "2016-02-10 20:42:32", 
      "updated_at": "2016-02-10 20:42:32", 
      "cart_item_id": 88, 
      "cart_id": 14 
      }, 
      { 
      "id": 77, 
      "item_id": 35, 
      "name": "Smoked Salmon & Mozzarella", 
      "price": 50, 
      "created_at": "2016-02-10 20:42:32", 
      "updated_at": "2016-02-10 20:42:32", 
      "cart_item_id": 88, 
      "cart_id": 14 
      } 
     ] 
     } 
    ] 
    } 
] 

正如你可以看到有3個級別;

頂層是cart 中層爲cart_items 底層是cart_modifier_items

cart可以包含多個cart_items

cart_items可以包含多個cart_modifier_items

我試圖做的是採取這種輸出並將其複製到相同的表中; 該車型也是相同的

orderorder_itemsorder_item_modifiers

頂層是order 中層是order_items 底部水平order_item_modifiers

order可以包含多個order_items

order_items可以包含多個order_item_modifiers

這就是我迄今爲止所做的;

$order = Order::create([ 
    'order_id' => $order_number, 
    'date' => $cart['date'], 
    'time' => $cart['time'], 
    'total' => $total, 
    'subtotal' => $subtotal, 
    'order_status_id' => 1, 
    'customer_id' => $id, 
    'restaurant_id' => $cart['restaurant_id'], 
])->id; 

if (!empty($cart['cart_items'])) { 

    foreach($cart['cart_items'] as $order_item) { 

     $orderItem = OrderItem::create([ 
      'item_id' => $order_item['id'], 
      'name' => $order_item['name'], 
      'description' => $order_item['description'], 
      'price' => $order_item['price'], 
      'qty' => $order_item['qty'], 
      'restaurant_id' => $order_item['restaurant_id'], 
      'order_id' => $order, 
     ])->id; 

     if (!empty($order_item['cart_modifier_items'])) { 

      foreach ($order_item['cart_modifier_items'] as $order_modifier_item) { 
       OrderItemModifier::create([ 
        'item_id' => $order_modifier_item['id'], 
        'name' => $order_modifier_item['name'], 
        'price' => $order_modifier_item['price'], 
        'order_id' => $order, 
        'order_item_id' => $orderItem, 
       ]); 
      } 
     } 
    } 
} 

用我的代碼我得到的是order。在DB中不會創建order_itemsorder_item_modifiers。我也沒有從laravel

得到任何錯誤我肯定是做錯了我的循環或我如何訪問內部數組。任何幫助讚賞。

+0

您的''$ fillable''數組是否包含批量賦值字段? – arma

+0

@arma是所有在我的「模型」中聲明的 –

+0

您的查詢是否實際返回對象數組,或者它只是您的調試輸出?看起來應該是'$ cart-> id''和'$ order_item-> id''和'$ order_modifier_item-> id''。 – arma

回答

0

您的問題是$cart['cart_items']$order_item['cart_modifier_items']實際上並不存在,所以你!empty()檢查返回false

你被欺騙了一點Model魔法。當您傾銷您的$cart對象以查看其中的內容時,它會調用一系列函數將您的模型轉換爲json對象。在調用關係數據的方法中,它將關係名稱從camelCase轉換爲snake_case,並將其添加到json對象。因此,即使您的Model具有cartItems屬性,您的json轉儲將顯示cart_items

因此,快速解決方案是將$cart['cart_items']更改爲$cart['cartItems'],$order_item['cart_modifier_items']更改爲$order_item['cartModifierItems']


快速注意:即使Laravel的Model工具ArrayAccess,這意味着你可以像$cart['date']$cart['cartItems']等方式接入數據,所以一般更容易接受來對待它,因爲它是與性能它是對象和訪問箭頭語法($cart->date,$cart->cartItems等)。

+0

Lol @'magic' ...乾杯隊友。很有幫助!感謝您的指導,整理了我的問題。 –

相關問題