【发布时间】:2016-05-24 08:54:25
【问题描述】:
我在检索 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 的任何错误
我的循环或访问内部数组的方式肯定有问题。任何帮助表示赞赏。
【问题讨论】:
-
您的
$fillable数组是否包含大量赋值字段? -
@arma 是的,我的
models中都声明了 -
您的查询实际上是返回对象数组还是只是您的调试输出?看起来应该是
$cart->id和$order_item->id和$order_modifier_item->id。
标签: php arrays laravel laravel-5 eloquent