使用多个ID更新数据透视表

时间:2016-08-17 14:56:56

标签: mysql laravel pivot-table multiple-columns

$user = App\User::find(1);

$user->roles()->updateExistingPivot($roleId, $attributes);

这是我们在更新数据透视表时使用的内容。但我在表格中有两个与$roleId相同的值。我想只更新其中一个。我们怎么能这样做?

例如;这是我的sql表

userId -- roleId -- attributeId
  1          1          1
  1          1          2

这是另一个更好地解释的数据透视表:

order_id --- product_id --- feature_id --- product_quantity

在订单中我有多个产品。 任何产品都可以具有多种功能。 我试图在订单中保存数据库中具有不同功能的相同产品,问题从这里开始,它不能使用这些命令:

$order = Order::create( $request->all());
      $product_list = $request->input('product_list');
      $feature_list = $request->input('feature_list');
      $product_quantity = $request->input('product_quantity');

       /* attach pivot table */
      $order->product()->attach($product_list);  

      /* get the product list as array */              
      foreach($product_list as $key => $product_id)
      {   
        $order->product()->updateExistingPivot($product_id, array(
                        'feature_id' => $feature_list[$key],
                        'product_quantity' => $product_quantity[$key], // product_quantity is array
                        ));
      }    

2 个答案:

答案 0 :(得分:0)

尝试此更新映射表。

$user = App\User::find(1);
            if(empty($user->id) === false)
            {
                $user->roles()->detach();
                $user->roles()->attach($request->roles);
                return redirect()->route('users')->with('success', 'User has been updated successfully');
            }

      return redirect()->route('users')->with('error', 'Unable to update User. Please try again later');

答案 1 :(得分:0)

我通过这种方式处理问题并且有效 ...如果您可以找到其他解决方案,请在此分享... 在我的商店功能;

 public function store(OrderRequest $request)
    {
      $order = Order::create( $request->all());
      $product_row = $request->input('product_row'); 
      $product_list = $request->input('product_list');
      $feature_list = $request->input('feature_list');
      $product_quantity = $request->input('product_quantity');
      $product_status = $request->input('product_status' );

       /* attach pivot table */
       foreach($product_row as $key=>$value){

      $order->product()->attach($product_list[$key], ['feature_id'=>$feature_list[$key], 'product_quantity'=>$product_quantity[$key], 'product_status'=>$product_status[$key]] );

        }
}

并更新功能:

public function update(Order $order, OrderRequest $request) 
    {
      $order->update($request->all());

      $product_row = $request->input('product_row');
      $product_list = $request->input('product_list'); 
      $feature_list = $request->input('feature_list');
      $product_quantity = $request->input('product_quantity');
      $product_status = $request->input('product_status' );
      /* clear pivot table for the current order */
      $order->product()->detach();
      /* attach pivot table */
       foreach($product_row as $key=>$value){

      $order->product()->attach($product_list[$key], ['feature_id'=>$feature_list[$key], 'product_quantity'=>$product_quantity[$key], 'product_status'=>$product_status[$key]] );

        }