Laravel 5.x如何创建具有外键约束的新用户?

时间:2015-07-10 21:36:27

标签: php mysql laravel laravel-5 laravel-5.1

我可以使用以下方式创建新用户:

User::create([
    'username' => $data[ 'username' ],
    'email' => $data[ 'email' ],
    'first_name' => $data[ 'first_name' ],
    'last_name' => $data[ 'last_name' ],
    'password' => bcrypt($data[ 'password' ]),
]);

但是现在我想创建一个现在有region_id约束的用户,所以我认为可以通过将region_id添加到fillable并将其添加到用户create来实现:

User::create([
    'region_id' => $data[ 'region_id'
    'username' => $data[ 'username' ],
    'email' => $data[ 'email' ],
    'first_name' => $data[ 'first_name' ],
    'last_name' => $data[ 'last_name' ],
    'password' => bcrypt($data[ 'password' ]),
]);

在我的迁移中,我添加了:

$table->integer('region_id')->unsigned();

$table->foreign('region_id')
      ->references('id')
      ->on('regions');

并通过分配region_id使用工厂播种,但现在注册在应用程序中失败并抛出:

Undefined index: region_id

我再次查看了文档,看到我可以在此字段上添加索引到迁移,但经过一些阅读后,似乎MySQL可能实际上自动索引外键。

1 个答案:

答案 0 :(得分:1)

  1. 验证$data数组是否包含region_id
  2. 不要在可填写字段中添加region_id,而是执行此操作:

    $region = Region::find($data['region_id']);
    
    $region->users()->create([
       'username' => $data['username'],
       'email' => $data['email'],
       'first_name' => $data['first_name'],
       'last_name' => $data['last_name'],
       'password' => bcrypt($data['password']),
    ]);
    

    这将在用户对象中自动添加region_id字段。

  3.   

    注意:确保区域模型中有区域hasMany用户关系。