[英]Can not retrieve the id of a foreign key [Laravel]
我有 2 個表:用戶和需求。 用戶可以有任意數量的需求。 在需求表中,有用戶外鍵。
當用戶完成表單時,我將用戶和需求信息放在這兩個表中。
但我不知道如何將用戶 ID 放入需求表中。
這是我的控制器中的函數:
public function store(Request $request){
$demand = new Demand;
$user = new user ;
$user ->numStudent= $request->NumStudent;
$user ->role_id = "3";
$user ->Lastname = $request->LastName;
$user ->FirstName= $request->FirstName;
$user ->numero_etudiant = "12345678";
$user ->email = $request->Email;
$user ->password = bcrypt('idk');
$user ->adress= $request->Adress;
$user ->phone = $request->Phone;
$user ->parcours = $request->Parcours;
$demand->status_id= "3";
//problem below
$demand->User_id= $User;
//
$demand->time_id = $request->LoanTime;
$demand->creation_date = $request->CreationDate;
$demand->comments = "";
$user ->save();
$demand->save();
return redirect('/demands_list');
}
但它說“不能在寫上下文中使用方法返回值”。
親切地
在使用其屬性之前,您必須先保存用戶的實例。 您的代碼應如下所示。
public function store(Request $request){
$demand = new Demand;
$user = new user ;
$user->numStudent= $request->NumStudent;
$user->role_id = "3";
$user->Lastname = $request->LastName;
$user->FirstName= $request->FirstName;
$user->numero_etudiant = "12345678";
$user->email = $request->Email;
$user->password = bcrypt('idk');
$user->adress= $request->Adress;
$user->phone = $request->Phone;
$user->parcours = $request->Parcours;
$user->save();
$demand->status_id= "3";
//problem below
$demand->User_id= $user->id;
//
$demand->time_id = $request->LoanTime;
$demand->creation_date = $request->CreationDate;
$demand->comments = "";
$demand->save();
return redirect('/demands_list');
}
你的標簽假如你正在尋找這樣的雄辯(即Laravel)的方式。
簡短的回答:使用路由模型綁定並保持您的控制器方法有條理和專注。
正如已經回答的那樣,您的User
需要先被保存。 我建議您在自己的控制器中執行此步驟:
// UsersController.php
public function store(Request $request) {
$attributes = $request->validate([
// validation rules
]);
$user = User::create($attributes);
return redirect('/users/' . $user->id);
}
現在您已經創建了一個User
,然后您可以附加相關模型。 創建一組單獨的路由,指向一個單獨的控制器來處理關系:
// routes/web.php
Route::get('/user/{user}/demands', 'UserDemandsController@index');
Route::post('/user/{user}/demands', 'UserDemandsController@store');
// ^^^^^^
// used with route model binding
這是路由模型綁定發揮作用的地方,直接從路由參數 ( {user}
) 加載模型:
// UserDemandsController.php
public function store(Request $request, User $user) { // <-- ROUTE MODEL BINDING
$attributes = $request->validate([
// validation rules
]);
$user->demands()->create($attributes);
}
結果是非常干凈、簡單的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.