2017-03-02 86 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行。

相关问题