2015-07-10 32 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