2015-07-10 31 views
0

我能够通过创建一个新用户:Laravel 5.x如何创建一个具有外键约束的新用户?

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

+0

您确定您的'$ data'数组实际上存储在$ data ['region_id']'之下吗? – Mastergalen

+0

嗨@Mastergalen,就是这样。在Angular中,我使用ngOptions设置了select指令,但是将选项region对象传递回来,而不是region.name的region.id。谢谢! – mtpultz

回答

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']), 
    ]); 
    

    这将authomatically用户对象添加region_id场。

注:请确保您有在区域示范区的hasMany用户的关系。

+0

谢谢,这很好。如果您需要为用户添加两个外键值,您会做什么,例如:用户有region_id,还有rental_id和vehicle_id?我有所有的关系设置不知道你应该如何使用ORM设置它们。 – mtpultz