2017-02-28 8 views
0

私は注文するために2つのテーブルを持っています。私のordersテーブルには、注文の主な詳細が含まれていて、私のorder_itemテーブルには、注文された各アイテムの詳細があります。これは同じのために私のコードです:オーダーオブジェクトがコレクションのマップ関数内で定義されていません

$order = new Order(); 
    $order->user_id = $user->id; 
    if(!$order->save()){ 
     return response()->json([ 
      'message' => 'Unable to place your order. Try again.' 
     ], 500); 
    } 

    $items = Cart_Item::where('user_id', $user->id)->get(); 
    if($items->isEmpty()){ 
     return response()->json([ 
      'message' => 'Kindly add items to the cart before placing an order.' 
     ], 500); 
    } 
    $items = $items->map(function ($item, $key) { 
     $product = Product::where('id', $item->product_id)->first(); 
     $order_item = new Order_Item(); 
     $order_item->order_id = $order->id; 
     $order_item->product_id = $item->product_id; 
     $order_item->quantity = $item->quantity; 
     $order_item->price = $product->GetPrice->price; 
     if(!$order_item->save()){ 
      return response()->json([ 
       'message' => 'Unable to place your order. Try again.' 
      ], 500); 
     } 
    }); 

私はこれを実行しようとすると、私はライン$order_item->order_id = $order->id;にこのエラーUndefined variable: orderを取得します。注文オブジェクトにアクセスできないのはなぜですか?

答えて

1

変数をクロージャに渡すには、useを使用する必要があります。

$items = $items->map(function ($item, $key) use ($order) { 
    $product = Product::where('id', $item->product_id)->first(); 
    $order_item = new Order_Item(); 
    $order_item->order_id = $order->id; 
    $order_item->product_id = $item->product_id; 
    $order_item->quantity = $item->quantity; 
    $order_item->price = $product->GetPrice->price; 
    if(!$order_item->save()){ 
     return response()->json([ 
      'message' => 'Unable to place your order. Try again.' 
     ], 500); 
    } 
}); 
+0

これは今日私の2番目の回答です。百万の感謝:) – JackSlayer94

関連する問題