0

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

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 添加到可填充,并将其添加到用户创建来完成:

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 似乎实际上可能会自动索引外键。

4

1 回答 1

2
  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这将自动在用户对象中添加字段。

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

于 2015-07-11T07:51:09.617 回答