Заполнение базы данных в файле миграции Laravel

Я просто изучаю Laravel и имею рабочий файл миграции, создающий таблицу пользователей. Я пытаюсь заполнить запись пользователя как часть миграции:

public function up() { Schema::create('users', function($table){ $table->increments('id'); $table->string('email', 255); $table->string('password', 64); $table->boolean('verified'); $table->string('token', 255); $table->timestamps(); DB::table('users')->insert( array( 'email' => 'name@domain.com', 'verified' => true ) ); }); } 

Но при запуске php artisan migrate я получаю следующую ошибку:

 SQLSTATE[42S02]: Base table or view not found: 1146 Table 'vantage.users' doesn't exist 

Это очевидно из-за того, что Artisan еще не создал таблицу, но вся документация, похоже, говорит о том, что существует способ использования Fluent Query для заполнения данных в рамках миграции.

Кто-нибудь знает как? Благодаря!

    Не кладите DB :: insert () внутри Schema :: create (), потому что метод create должен закончить создание таблицы, прежде чем вы сможете вставить материал. Попробуйте это вместо этого:

     public function up() { // Create the table Schema::create('users', function($table){ $table->increments('id'); $table->string('email', 255); $table->string('password', 64); $table->boolean('verified'); $table->string('token', 255); $table->timestamps(); }); // Insert some stuff DB::table('users')->insert( array( 'email' => 'name@domain.com', 'verified' => true ) ); } 

    Я знаю, что это старый пост, но поскольку он появился в поиске Google, я думал, что поделился бы некоторыми знаниями здесь. @ erin-geyer отметил, что микширование перемещений и сеялки может создавать головные боли, а @justamartin противоречит тому, что иногда вам нужны / нужны данные, которые будут заполнены как часть вашего развертывания.

    Я бы сделал еще один шаг и сказал, что иногда желательно иметь возможность последовательно развертывать изменения данных, чтобы можно было, например, развертывать на стадии постановки, видеть, что все хорошо, а затем развертывать на производство с уверенностью в тех же результатах (и не нужно помнить, чтобы выполнить какой-то ручной шаг).

    Тем не менее, по-прежнему сохраняется значение для разделения семян и миграции, поскольку это две связанные, но разные проблемы. Наша команда скомпрометировала создание миграций, которые называют сеялки. Это выглядит так:

     public function up() { Artisan::call( 'db:seed', [ '--class' => 'SomeSeeder', '--force' => true ] ); } 

    Это позволяет вам запускать семя один раз, как перенос. Вы также можете реализовать логику, которая предотвращает или увеличивает поведение. Например:

     public function up() { if ( SomeModel::count() < 10 ) { Artisan::call( 'db:seed', [ '--class' => 'SomeSeeder', '--force' => true ] ); } } 

    Это, очевидно, условно выполнит вашу сеялку, если будет меньше 10 SomeModels. Это полезно, если вы хотите включить сеялку в качестве стандартной сеялки, которая выполняется при вызове artisan db:seed а также при миграции, чтобы вы не «удвоились». Вы также можете создать обратную сеялку, чтобы откаты работали, как ожидалось, например

     public function down() { Artisan::call( 'db:seed', [ '--class' => 'ReverseSomeSeeder', '--force' => true ] ); } 

    Второй параметр --force необходим для запуска сеялки в рабочей среде.

    Вот очень хорошее объяснение, почему использование Laravel Database Seeder предпочтительнее использования Migrations: http://laravelbook.com/laravel-database-seeding/

    Хотя, следуя инструкциям в официальной документации, это гораздо лучше, потому что реализация, описанная в приведенной выше ссылке, кажется, не работает и является неполной. http://laravel.com/docs/migrations#database-seeding

    Это должно делать то, что вы хотите.

     public function up() { DB::table('user')->insert(array('username'=>'dude', 'password'=>'z19pers!')); } 

    попробуйте: (не проверено)

     public function up() { Schema::table('users', function($table){ $table->increments('id'); $table->string('email', 255); $table->string('password', 64); $table->boolean('verified'); $table->string('token', 255); $table->timestamps(); $table->insert( array( 'email' => 'name@domain.com', 'verified' => true ) ); }); }