我在检索Eloquent
模型并将其删除然后将其添加到另一个表时遇到了困难。
所以这是我的查询;
$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
我要做的是将此输出并将其复制到相同的表中; 模型也相同
order
,order_items
,order_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
。 order_items
和order_item_modifiers
未在DB
中创建。我也没有从laravel
我肯定是在做我的循环或者我如何访问内部数组。任何帮助表示赞赏。
答案 0 :(得分:0)
您的问题是$cart['cart_items']
和$order_item['cart_modifier_items']
实际上并不存在,因此您的!empty()
支票正在返回false
。
你被一点Model
魔法所欺骗。当您转储$cart
对象以查看其中的内容时,它会调用一系列函数将您的模型转换为json对象。在调用转储关系数据的方法中,它将关系名称从camelCase
转换为snake_case
,并将其添加到json对象。因此,即使您的模型具有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
等)访问它的属性。