149

私は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 を使用して移行の一部としてデータを入力する方法があると書かれているようです。

誰でも方法を知っていますか?ありがとう!

4

8 に答える 8

269

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
        )
    );
}
于 2012-10-04T21:25:19.780 に答える
17

移行を使用するよりもLaravelのデータベース シーダーを使用する方が望ましい理由についての非常に良い説明を以下に示します。

ただし、上記のリンクで説明されている実装は機能していないようで不完全であるため、公式ドキュメントの指示に従うことをお勧めします。 http://laravel.com/docs/migrations#database-seeding

于 2014-05-22T20:19:27.167 に答える
7

Laravel 8 を使用していて、複数のレコードで初期化したい場合は、これら 2 つの方法のいずれかで実行できます。

1. 推奨されない方法

public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });

        DB::table('categories')->insert(
            array(
                [
                    'name' => 'Category1',
                ],
                [
                    'name' => 'Category2',
                ],
                [
                    'name' => 'Category3',
                ],
            )
        );
    }

上記の方法は問題ありませんが、created_at列とupdated_at列が空白のままになります。

2. おすすめの方法

 public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });


        $data =  array(
            [
                'name' => 'Category1',
            ],
            [
                'name' => 'Category2',
            ],
            [
                'name' => 'Category3',
            ],
        );
        foreach ($data as $datum){
            $category = new Category(); //The Category is the model for your migration
            $category->name =$datum['name'];
            $category->save();
        }

    }
于 2021-05-02T09:45:35.260 に答える
5

これはあなたが望むことをするはずです。

public function up()
{
    DB::table('user')->insert(array('username'=>'dude', 'password'=>'z19pers!'));
}
于 2012-11-21T05:11:57.210 に答える