Laravel 5.2多模型save()

Fus*_*ion 6 mass-assignment eloquent laravel-5.2

我需要存储恰好三个页面,在通过形式一次。我希望以与模型save()方法类似的方式进行保存,因为这将自动更新记录时间戳。

如何一次对多个记录执行此操作?

我的页面型号

namespace App;
use Illuminate\Database\Eloquent\Model;

class Page extends Model{
     protected $table = 'simple_pages';
}
Run Code Online (Sandbox Code Playgroud)

我的代码

public function createPages(Request $request){ // I use Page at the top
     $data = [
          [
          'title'=> $request->first,
          'content'=> $request->firstCont
          ],[
          'title'=> $request->second,
          'content'=> $request->secondCont
          ][
          'title'=> $request->third,
          'content'=> $request->thirdCont
          ]
     ];
     Page::unguard();
     $pages = new Page($data);
     $pages->save(); // Something like this would be amazing
     Page::reguard();
}
Run Code Online (Sandbox Code Playgroud)

注意:我强烈反对创建多个Page模型实例,然后将它们循环以保存每个实例。另外,我也不想使用数据库插入,因为它不会自动更新记录时间戳。

Fus*_*ion 5

经过长时间的搜索,我发现了这个:

        $eloquentCollection->each(function ($item, $key) {
            $item->save();
        });
Run Code Online (Sandbox Code Playgroud)

是的,它是迭代,但看起来没有其他方法可以保存多个模型。唯一的选择是使用DB::insert(),但要注意没有自动更新的时间戳。

此外,如果您愿意保存太多的 eloquent 模型,由于可能存在内存问题,请将它们分块保存(或将它们推入Queue)。


ash*_*ash 2

如果您阅读手册质量分配

public function createPages(Request $request){ // I use Page at the top
     $data = [
          [
          'title'=> $request->first,
          'content'=> $request->firstCont
          ],[
          'title'=> $request->second,
          'content'=> $request->secondCont
          ][
          'title'=> $request->third,
          'content'=> $request->thirdCont
          ]
     ];

     Page::unguard();
     $pages = Page::create($data);
     Page::reguard();
}
Run Code Online (Sandbox Code Playgroud)