种子一次多行laravel 5


Seed multiple rows at once laravel 5

我目前正在尝试为我的用户表播种。如果我像这样用两行来尝试,它会失败。如果我只使用一个数组,而不是$users数组中的两个数组来创建一些伪数据,那么效果很好。

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

class UserTableSeeder extends Seeder {
    public function run()
    {
        DB::table('users')->delete();
        $users = [
            ['id' => 1, 'name' => 'Stephan de Vries', 'username' => 'stephan', 'email' => 'stephan-v@gmail.com', 'password' => bcrypt('carrotz124')],
            ['id' => 2, 'name' => 'John doe', 'username' => 'johnny', 'email' => 'johndoe@gmail.com', 'password' => bcrypt('carrotz1243')],
        ];
        User::create($users);
    }
}

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

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

否则,您可以只使用DB::table()insert:

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

实际上,您也可以在模型上调用insert()(得到的查询是相同的)

User::insert($users);

注意如果选择insert方法,则会丢失特殊的Eloquent功能,如时间戳和模型事件。

这适用于Laravel^5

<?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')->count() == 0){
            DB::table('users')->insert([
                [
                    'name' => 'Administrator',
                    'email' => 'admin@app.com',
                    'password' => bcrypt('password'),
                    'created_at' => date('Y-m-d H:i:s'),
                    'updated_at' => date('Y-m-d H:i:s'),
                ],
                [
                    'name' => 'Agency',
                    'email' => 'agency@app.com',
                    'password' => bcrypt('password'),
                    'created_at' => date('Y-m-d H:i:s'),
                    'updated_at' => date('Y-m-d H:i:s'),
                ],
                [
                    'name' => 'End',
                    'email' => 'endcustomer@app.com',
                    '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 "; }
    }
}

create()仅用于存储一条记录。要存储多条记录,应该使用insert()而不是create()。所以代码看起来是这样的:

class UserTableSeeder extends Seeder {
  public function run()
  {
    DB::table('users')->delete();
    $users = [
        ['id' => 1, 'name' => 'Stephan de Vries', 'username' => 'stephan', 'email' => 'stephan-v@gmail.com', 'password' => bcrypt('carrotz124')],
        ['id' => 2, 'name' => 'John doe', 'username' => 'johnny', 'email' => 'johndoe@gmail.com', 'password' => bcrypt('carrotz1243')],
    ];
    User::insert($users);
  }
}

第页。S.insert()函数将不存储时间戳。即CCD_ 9&updated_by字段。

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'),
        ]);
    }
}

使用截断

<?php
use Illuminate'Database'Seeder;
use App'User;
class UsersTableSeeder extends Seeder
{
     /**
     * Run the database seeds.
     *
     * @return void
     */
  public function run()
    {
      User::truncate();
        $users =  [
            [
              'name' => 'Super Admin',
              'email' => 'superadmin@gmail.com',
              'password' => '123456',
            ],
            [
              'name' => 'Account Admin',
              'email' => 'accountadmin@gmail.com',
              'password' => '13456',
            ],
            [
              'name' => 'Project Admin',
              'email' => 'projectadmin@gmail.com',
              'password' => '13456',
            ],
            [
              'name' => 'Client Admin',
              'email' => 'clientadmin@gmail.com',
              'password' => '13456',
            ]
          ];
          User::create($users);
    }
}

如果有人对此感到困惑,我从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' => 'stephan-v@gmail.com',
                 'password' => bcrypt('carrotz124'
         ),
        1 => 
          array (
                 'id' => 2,
                 'name' => 'John doe',
                 'username' => 'johnny',
                 'email' => 'johndoe@gmail.com',
                 'password' => bcrypt('carrotz1243'
         ),
     ));
}}

每次种子程序运行时,我都会用这种方式插入新记录并更新以前的记录。

$languages = [
        ['id' => 1, 'language_name' => 'English', 'language_code' => 'en'],
        ['id' => 2, 'language_name' => 'Spanish', 'language_code' => 'es'],
        ['id' => 3, 'language_name' => 'French', 'language_code' => 'fr'],
        ['id' => 4, 'language_name' => 'German', 'language_code' => 'de'],
        ['id' => 5, 'language_name' => 'Swahili', 'language_code' => 'sw']
    ];
    foreach ($languages as $language) {
        Language::updateOrCreate(['id' => $language['id']], $language);
    }

如果您试图插入用于暂存的随机数据,则可以使用for循环

for ($i = 0; $i <= 29; $i++) {
            DB::table('userdata')->insert([
                'uname' => Str::random(10),
                'upassword' => Str::random(10)
            ]);
            DB::table('testtable2')->insert([
                'name' => Str::random(10),
                'number' => random_int(100, 9999)
            ]);
     }