【问题标题】:Laravel Eloquent: Is it possible to use "create" method for inserting multiple records as array?Laravel Eloquent:是否可以使用“创建”方法将多条记录作为数组插入?
【发布时间】:2020-05-21 01:19:43
【问题描述】:

正如 Laravel 文档所说,我们可以使用 create eloquent 方法插入“a”记录

$flight = App\Flight::create(['name' => 'Flight 10']);

是否可以使用没有循环的create方法插入多条记录。即

$flight = App\Flight::create([['name' => 'Flight 10'], ['name' => 'Flight 11']]);

目前我正在使用插入方法,但它不处理我必须使其可填充的 created_at 和 updated_at 值。

$flight = App\Flight::insert([['name' => 'Flight 10'], ['name' => 'Flight 11']);

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    create() 支持只插入一条记录

    insert() 支持插入多条记录

    createMany() 仅支持仅用于关系,不支持模型。

    所以你只能为这个 eloquent builder 选择insert() 方法。

    不过,您可以在迁移中使用useCurrent(),因此默认值将自动设置当前时间

    $table->timestamp('created_at')->useCurrent();
    $table->timestamp('updated_at')->useCurrent();
    

    这将适用于insert() 方法,无需手动设置时间戳:

    $flight = App\Flight::insert([['name' => 'Flight 10'], ['name' => 'Flight 11']);
    

    【讨论】:

      【解决方案2】:

      手动填写时间戳。

      $data_to_create = [
      [
        'name' => 'Flight 10'
         'created_at' => date('Y-m-d H:i:s'),
         'updated_at' => date('Y-m-d H:i:s')
      ],
      [
        'name' => 'Flight 11'
         'created_at' => date('Y-m-d H:i:s'),
         'updated_at' => date('Y-m-d H:i:s')
      ]
      ];
      
      App\Flight::insert($data_to_create);
      

      【讨论】:

        【解决方案3】:
        $data = [
        [
          'name' => 'Flight 10'
           'created_at' => date('Y-m-d H:i:s'),
           'updated_at' => date('Y-m-d H:i:s')
        ],
        [
          'name' => 'Flight 11'
           'created_at' => date('Y-m-d H:i:s'),
           'updated_at' => date('Y-m-d H`enter code here`:i:s')
        ]
        

        ];

        App\Flight::createMany($data);

        【讨论】:

          【解决方案4】:

          insert 不会添加时间戳值,因此您必须手动输入

           $data = [
              [
                'name' => 'Flight 10'
                 'created_at' => date('Y-m-d H:i:s'),
                 'updated_at' => date('Y-m-d H:i:s')
              ],
              [
                'name' => 'Flight 11'
                 'created_at' => date('Y-m-d H:i:s'),
                 'updated_at' => date('Y-m-d H:i:s')
              ]
           ];
          
          App\Flight::insert($data);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-05-26
            • 2016-08-16
            • 2018-03-26
            • 1970-01-01
            • 1970-01-01
            • 2017-08-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多