php 一次播种多行 Laravel 5

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/28594076/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 23:57:46  来源:igfitidea点击:

Seed multiple rows at once laravel 5

phplaravelschemaeloquentseed

提问by Stephan-v

I'm currently trying to seed my users table. If I try it like this with 2 rows, it fails. It works fine if I just use a single array instead of the 2 arrays inside the $users array to create some fake data.

我目前正在尝试为我的用户表做种。如果我像这样用 2 行尝试它,它会失败。如果我只使用一个数组而不是 $users 数组中的 2 个数组来创建一些假数据,它就可以正常工作。

What am I doing wrong, what is the proper way to do this?

我做错了什么,这样做的正确方法是什么?

class UserTableSeeder extends Seeder {

    public function run()
    {
        DB::table('users')->delete();

        $users = [
            ['id' => 1, 'name' => 'Stephan de Vries', 'username' => 'stephan', 'email' => '[email protected]', 'password' => bcrypt('carrotz124')],
            ['id' => 2, 'name' => 'John doe', 'username' => 'johnny', 'email' => '[email protected]', 'password' => bcrypt('carrotz1243')],
        ];

        User::create($users);
    }

}


回答by lukasgeiter

If you have to use the model you need a loop:

如果必须使用该模型,则需要一个循环:

foreach($users as $user){
    User::create($user);
}

Otherwise you can just use DB::table()and insert:

否则你可以只使用DB::table()and insert

DB::table('users')->insert($users);

Actually you can also call insert()on the model (the resulting query is the same)

其实你也可以调用insert()模型(结果查询是一样的)

User::insert($users);

Noteif you choose the insertmethod you loose special Eloquent functionality such as timestamps and model events.

请注意,如果您选择了这种insert方法,则会失去 Eloquent 的特殊功能,例如时间戳和模型事件。

回答by lewis4u

This works, even for Laravel 5.3

这有效,即使对于 Laravel 5.3

<?php

use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */

    public function run()
    {
        // check if table users is empty
        if(DB::table('users')->get()->count() == 0){

            DB::table('users')->insert([

                [
                    'name' => 'Administrator',
                    'email' => '[email protected]',
                    'password' => bcrypt('password'),
                    'created_at' => date('Y-m-d H:i:s'),
                    'updated_at' => date('Y-m-d H:i:s'),
                ],
                [
                    'name' => 'Agency',
                    'email' => '[email protected]',
                    'password' => bcrypt('password'),
                    'created_at' => date('Y-m-d H:i:s'),
                    'updated_at' => date('Y-m-d H:i:s'),
                ],
                [
                    'name' => 'End',
                    'email' => '[email protected]',
                    'password' => bcrypt('password'),
                    'created_at' => date('Y-m-d H:i:s'),
                    'updated_at' => date('Y-m-d H:i:s'),
                ]

            ]);

        } else { echo "\e[31mTable is not empty, therefore NOT "; }

    }
}

回答by Simple Test

public function run()
{
    //
    for ($i=0; $i < 1000; $i++) { 
         DB::table('seo_contents')->insert([
            'title' => str_random(10),
            'content' => str_random(100),
            'created_at'=>date('Y-m-d H:i:s'),
            'updated_at'=>date('Y-m-d H:i:s'),

        ]);
    }

}

回答by Rikesh Shrestha

You should use insert instead of create. So the code will look like this:

您应该使用插入而不是创建。所以代码看起来像这样:

class UserTableSeeder extends Seeder {

  public function run()
  {
    DB::table('users')->delete();

    $users = [
        ['id' => 1, 'name' => 'Stephan de Vries', 'username' => 'stephan', 'email' => '[email protected]', 'password' => bcrypt('carrotz124')],
        ['id' => 2, 'name' => 'John doe', 'username' => 'johnny', 'email' => '[email protected]', 'password' => bcrypt('carrotz1243')],
    ];

    User::insert($users);
  }

}

回答by DotComLab ZA

If anyone is struggling with this, I have been using the following since Laravel 5and can confirm is still working in Laravel 7+...

如果有人为此而苦苦挣扎,我自Laravel 5以来一直在使用以下内容,并且可以确认仍在Laravel 7+ 中工作......

class UserTableSeeder extends Seeder {

public function run()
{
    \DB::table('users')->delete();

    \DB::table('users')->insert(array (
        0 => 
          array (
                 'id' => 1,
                 'name' => 'Stephan de Vries',
                 'username' => 'stephan',
                 'email' => '[email protected]',
                 'password' => bcrypt('carrotz124'
         ),
        1 => 
          array (
                 'id' => 2,
                 'name' => 'John doe',
                 'username' => 'johnny',
                 'email' => '[email protected]',
                 'password' => bcrypt('carrotz1243'
         ),
     ));

}}