簡體   English   中英

無法檢索外鍵的 id [Laravel]

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM