【问题标题】:How do I fill order id when creating orders and orderitems table with 1 form?使用 1 个表单创建订单和订单项表时如何填写订单 ID?
【发布时间】:2021-08-27 07:05:01
【问题描述】:

在使用 1 个表单创建订单和订单项表时如何填写订单 ID?

我用 laravel 做订单管理系统。

当用户提交订单表单时,它将创建订单和订单项目表,其中订单项目表有 1 列名为 order_id。我不明白如何在orderitems 表中填写order_id

这是我的订单控制器

public function store(Request $request)
{
    $order = Order::create([
        'user_id' => $request->input('user_id'),
    ]);

    $orderitem = Orderitem::create([
        'order_id' => $request->input('order_id'),
        'product_id' => $request->input('product_id'),
        'quantity' => $request->input('quantity'),
    ]);

    return redirect()->route('orders.index');
}

【问题讨论】:

    标签: laravel laravel-8


    【解决方案1】:
    public function store(Request $request)
    {
        $order = Order::create([
            'user_id' => $request->input('user_id'),
        ]);
    
        $orderitem = Orderitem::create([
            'order_id' => $order->id,
            'product_id' => $request->input('product_id'),
            'quantity' => $request->input('quantity'),
        ]);
    
        return redirect()->route('orders.index');
    }
    

    【讨论】:

      【解决方案2】:

      首先在两个模型中创建关系。在Order 模型中创建hasMany 关系:

      public function orderItems()
      {
          return $this->hasMany(OrderItem::class, 'order_id');
      }
      

      然后在OrderItem模型中创建反向关系:

      public function order()
      {
          return $this->belongsTo(Order::class, 'order_id', 'id');
      }
      

      然后终于在控制器中

      $order = Order::create([
          'user_id' => $request->input('user_id'),
      ]);
      
      $orderItems = $order->orderItems()->create([
          'product_id' => $request->input('product_id'),
          'quantity' => $request->input('quantity')
      ]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-12
        • 2019-10-06
        • 2019-09-08
        • 2015-06-19
        • 2020-05-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多