【问题标题】:update pivot table with multiple ids使用多个 id 更新数据透视表
【发布时间】:2016-08-17 14:56:55
【问题描述】:
$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
                        ));
      }    

【问题讨论】:

    标签: mysql laravel pivot-table multiple-columns


    【解决方案1】:

    试试这个来更新映射表。

    $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');
    

    【讨论】:

    • 我添加了一个详细的示例。它可以更好地解释问题
    • 你能把它分成两张表吗? order_id --- product_id & product_id --- feature_id 两者都属于BelongsToMany关系
    • 我可以用情景给你解释。用户有多个角色,每个角色都有多个权限。所以用户--一个表中的角色和角色--另一个表中的权限
    • 我不能分成两张表,因为每个订单可以包含相同的产品,每个产品可以包含不同的数量。因此,order-product-feature 和数量应该在同一个数据透视表中。
    【解决方案2】:

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

     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]] );
    
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-20
      • 2023-02-26
      • 2021-02-06
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多