2017-03-02 127 views
-1

我有一張如下所示的表格。更新表,其中單個id在laravel中有多個記錄

表A

id | id_n | val_a 
1 | 1 | a1 
2 | 2 | a2 
3 | 2 | a3 
4 | 2 | a4 

,我想用laravel 5.2

更新表後看起來像下面更新所有值,其中id_n = 2val_a = {b1,b2,b3,b4,b5}

id | id_n | val_a 
1 | 1 | a1 
2 | 2 | b1 
3 | 2 | b2 
4 | 2 | b3 
5 | 2 | b4 
6 | 2 | b5 

如何在laravel 5.2中做到這一點?感謝未來。

+0

你寫道,你想改變'id_n = 2'的所有值,但在你想要的輸出中,你也改變了第一行,其中'id_n = 1'。這是你的錯誤還是我誤解了一些東西? – KuKeC

+0

糾正你的問題,因爲它沒有任何意義。 (你的表) – Onix

+0

這個問題寫得不好。請更新它,以便我們能夠以更具體的方式和正確的方式幫助您。謝謝。 – GabMic

回答

0

如果要刪除舊記錄,要更新新

  1. 這樣刪除舊記錄,

    DB::table('table_name')->where('id_n', 2)->delete(); 
    
  2. 商店新記錄

    $postData = [ 
        ["id_n" => 2,"val_a"=> "b1"], 
        ["id_n" => 2,"val_a"=> "b1"], 
        ........ 
    ]; 
    DB::table('table_name')->insert($postData); 
    
+0

謝謝Niklesh。這是最簡單的方法。刪除記錄然後更新。但是有沒有其他方式可以更好地完成這項任務? –

+0

另一種方法是將數據存儲爲json,這些數據將存儲在一行中並且易於更新,但需要始終進行解碼/編碼,搜索會使其變慢。我提供的答案很簡單,很好。 – C2486

0

既然你不知道有多少行喲你需要更新我會以不同於Niklesh的方式進行更新。

首先,我也會刪除所有行,但我會檢查多少行我已刪除

$num_deleted = your_model::where('id_n', 2)->delete(); 

之後,我將環通所有行和seperately插入每一行。

for ($x = 1; $x <= $num_deleted; $x++) { 
    your_model::create(["id_n" => 2,"val_a"=> "b".$x]); 
} 

這樣worksif你只有1列,其中id_n = 2或者,你可以有n行。

相關問題