2016-08-17 68 views
1
$user = App\User::find(1); 

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

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

例如;这是我的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 
         )); 
     }  

回答

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

     } 
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'); 
+0

我添加了一个详细的例子。它可以更好地解释问题 –

+0

你能把它分成两个表。 order_id --- product_id&product_id --- feature_id同时拥有belongsToMany关系 – Parithiban

+0

我可以用场景解释你。用户有多个角色,每个角色都有多个权限。所以用户 - 在一个表和角色中的角色 - 在另一个表中的权限 – Parithiban