Не удается получить идентификатор внешнего ключа [Laravel] - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть 2 таблицы: пользователь и требования. Пользователь может иметь столько требований, сколько он хочет. Внутри таблицы требований находится внешний ключ пользователя.

Когда пользователь заполняет форму, я помещаю пользователя и запрашиваю информацию внутри этих двух таблиц.

Но я не знаю, как получить идентификатор пользователя, чтобы поместить его в таблицу требований.

Вот функция внутри моего контроллера:

    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 ]

1 голос
/ 18 февраля 2020

Вы должны сначала сохранить экземпляр своего пользователя перед использованием его свойств. Ваш код должен выглядеть следующим образом.

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

    }   
0 голосов
/ 18 февраля 2020

Исходя из ваших тегов, что вы ищете Eloquent (то есть 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);
}

Результат очень чистый, простой код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...