Laravel:如何 运行 播种关系

Laravel: how to run seeder with relationships

为什么我的播种器代码中的 "relationship" 不起作用?它可以毫无问题地插入用户模型。但不向 UserMeta 模型插入任何内容。甚至没有任何错误。
我已经在控制器中测试了这段代码。它在 "relationship"

下运行良好
    <?php

use Illuminate\Database\Seeder;
use App\User;
use App\UserMeta;

class MyUsersTableSeeder extends Seeder
{
    /**
     * Auto generated seed file.
     *
     * @return void
     */
    public function run()
    {
        if (User::count() == 0) {

            $user = User::create([
                'name'           => 'Admin',
                'email'          => 'admin@admin.com',
                'password'       => bcrypt('password'),
                'remember_token' => str_random(60),
            ]);

            $user_meta = new UserMeta([
                'meta_key' => 'role',
                'meta_value' => 'admin',
            ]);
            $user->UserMeta()->save($user_meta);
        }
    }
}

模范用户

public function UserMeta()
{
    return $this->hasOne('App\UserMeta', 'user_id');
}

模型用户元数据

public function user()
{
    return $this->belongsTo('App\User');
}

用户table

       Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });

用户元table

        Schema::create('usermeta', function (Blueprint $table) {
            $table->increments('user_meta_id');
            $table->integer('user_id')->unsigned();
            $table->string('meta_key');
            $table->string('meta_value');
        });

试试下面的代码:

$user_meta = new UserMeta([
                'meta_key' => 'role','user_id'=>$user_id,
            ]);
$user_meta->user_id=$user->id;
$user_meta->save();

将您的 usermeta 迁移更改为

Schema::create('usermeta', function (Blueprint $table) {
    $table->increments('user_meta_id');
    $table->integer('user_id')->unsigned();

    // add foreign key constraint
    $table->foreign('user_id')->references('id')->on('users');

    $table->string('meta_key');
    $table->string('meta_value');
});

并重新运行 您的迁移。