【问题标题】:How can I insert multiple rows into database in Laravel?如何在 Laravel 的数据库中插入多行?
【发布时间】:2018-05-18 20:50:54
【问题描述】:

这是我的代码:

$num = 5;
$voucher = new Voucher;

for ( $i = $num; $i > 0; $i-- ) {

    $token = generateRandomString(5, ['number', 'uppercase']);

    $voucher->prefix = $request->prefix;
    $voucher->token = $token;
    $voucher->description = $request->description;
    $voucher->date_time = time();
    $voucher->save();
}

显然我的代码应该插入 5 行。但令人惊讶的是它只插入了 1 行。出了什么问题,我该如何解决?

【问题讨论】:

  • $voucher = new Voucher; 在 for 循环中!
  • @HirenGohel True .. 谢谢

标签: php mysql laravel loops insert


【解决方案1】:

您应该在 for 循环中创建一个新凭证。目前,正如您所说,您将 同一对象 插入数据库五次

【讨论】:

    【解决方案2】:

    您总是使用相同的对象实例。每次您使用不同的数据保存同一行。这是解决方法。

    $num = 5;
    
    for ( $i = $num; $i > 0; $i-- ) {
    
        $voucher = new Voucher;
    
        $token = generateRandomString(5, ['number', 'uppercase']);
    
        $voucher->prefix = $request->prefix;
        $voucher->token = $token;
        $voucher->description = $request->description;
        $voucher->date_time = time();
        $voucher->save();
    }
    

    【讨论】:

      【解决方案3】:

      如果您已经有一个模型实例,您可以使用fill 方法为其填充属性数组:

      $num = 5;
      $voucher = new Voucher;
      
      for ( $i = $num; $i > 0; $i-- ) {
      
          $token = generateRandomString(5, ['number', 'uppercase']);
      
          $payload = [];
          $payload['prefix'] = $request->prefix;
          $payload['token'] = $token;
          $payload['description'] = $request->description;
          $payload['date_time'] = time();
      
          $voucher->fill($payload);
      }
      

      Documentation

      【讨论】:

        【解决方案4】:

        您每次都使用相同的实例! 在每个 for 循环中创建一个新的,例如:

        $num = 5;
        
        for ( $i = $num; $i > 0; $i-- ) {
        
            $voucher = new Voucher;
        
            $token = generateRandomString(5, ['number', 'uppercase']);
        
            $voucher->prefix = $request->prefix;
            $voucher->token = $token;
            $voucher->description = $request->description;
            $voucher->date_time = time();
            $voucher->save();
        }
        

        【讨论】:

          【解决方案5】:

          这是创建多数组并简单地放入插入函数的基本示例。

          $num = 5;
          $dataArray = array();
          for ( $i = $num; $i > 0; $i-- ) {
          
              $token = generateRandomString(5, ['number', 'uppercase']);
          
              $dataArray[$i]['prefix'] = $request->prefix;
              $dataArray[$i]['token'] = $token;
              $dataArray[$i]['description'] = $request->description;
              $dataArray[$i]['date_time'] = time();
          
          }
          
          Voucher::insert($dataArray); 
          

          【讨论】:

            猜你喜欢
            • 2022-08-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-08-17
            • 1970-01-01
            • 2020-08-26
            • 2016-07-29
            • 2021-05-11
            相关资源
            最近更新 更多