一次种植多行laravel 5

Ste*_*n-v 39 php schema seed laravel eloquent

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

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

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);
    }

}
Run Code Online (Sandbox Code Playgroud)

luk*_*ter 52

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

foreach($users as $user){
    User::create($user);
}
Run Code Online (Sandbox Code Playgroud)

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

DB::table('users')->insert($users);
Run Code Online (Sandbox Code Playgroud)

实际上你也可以调用insert()模型(结果查询是相同的)

User::insert($users);
Run Code Online (Sandbox Code Playgroud)

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


lew*_*s4u 31

这适用于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' => '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 "; }

    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这个命令以某种方式只插入第一行并且没有给出错误 (6认同)
  • 直接传递数组或先将其放入变量中应该没有区别。但如果您直接执行此操作,请不要忘记添加实际的数组括号。即 [a =&gt; 1, b=&gt;2], [a=&gt;3, b=&gt;4] 不起作用。确保执行 [[a =&gt; 1, b=&gt;2], [a =&gt;3, b =&gt;4]] 以便传入记录数组。否则,您将传递除第一个之外的所有内容作为要插入的参数。 (2认同)

小智 8

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'),

        ]);
    }

}
Run Code Online (Sandbox Code Playgroud)


Shr*_*esh 5

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

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);
  }

}
Run Code Online (Sandbox Code Playgroud)


Meb*_*ine 5

使用截断

<?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);

    }
}
Run Code Online (Sandbox Code Playgroud)