无法检索外键的ID [Laravel]

时间:2020-02-18 16:06:48

标签: php laravel eloquent

我有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');

    }   

但是它说“在写上下文中不能使用方法返回值”。

私下

2 个答案:

答案 0 :(得分:1)

您必须先保存用户的实例,然后才能使用其属性。您的代码应如下所示。

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

    }   

答案 1 :(得分:0)

根据您的标签,您正在寻找一种口才(即Laravel)的实现方式。

简短的答案:使用 route model binding ,并使您的控制器方法井井有条,一目了然。

已经answered,您的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);
}

结果是非常干净,简单的代码。

相关问题