Как можно получить идентификатор модели сразу после ее создания в той же функции контроллера? - PullRequest
1 голос
/ 23 апреля 2020

Позвольте мне показать вам мой код и разместить комментарии для вас, ребята, чтобы лучше понять:

$homework = new Homework([ // I create Homework (And I indeed want to get the ID of the one that was just created).
    'subject_id' => $request->subject_id,
    'user_id' => auth()->user()->id,
    'title' => $request->name,
    'image' => $path,
    'progress' => $request->progress,
    'description' => $request->description,
    'duedate' => $request->date
]);

$homework->save(); // I save it

$homeworkid = Homework::where('id', $id)->first(); // I try to retrieve it, but I'm not sure how to get it as I need to define `$id`.

$progress = newProgress([
    'user_id' => auth()->user()->id,
    'homework_id' => $homeworkid, // I need this for the relationship to work.
    'title' => 'Initial Progress',
    'description' => 'This progress is auto-generated when you create an assignment',
    'username' => auth()->user()->name,
    'progress' => $homeworkid->progress
]);

$progress->save(); // I save the progress

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

Ответы [ 3 ]

2 голосов
/ 23 апреля 2020

Нет необходимости создавать экземпляр новой модели и сохранять ее, если вы ничего не делаете между созданием экземпляра и сохранением, вместо этого можно использовать метод create:

$homework = Homework::create([
    'subject_id' => $request->subject_id,
    'user_id' => auth()->user()->id,
    'title' => $request->name,
    'image' => $path,
    'progress' => $request->progress,
    'description' => $request->description,
    'duedate' => $request->date
]);

$homework->id; // get the id

После сохранения / создания модель, к которой вы можете получить доступ к id, как обычно:

$homework->id

Что вы можете сделать, это настроить отношения между вашими моделями, чтобы вы могли сделать после создания нового домашнего задания:

$homework->newProgress()->create([
    'user_id' => auth()->user()->id,
    'title' => 'Initial Progress',
    'description' => 'This progress is auto-generated when you create an assignment',
    'username' => auth()->user()->name,
    'progress' => $homework->progress
]);

Таким образом, вам не нужно пропускать домашнее задание id при создании нового newProgress, laravel автоматически пропустит его для вас.

1 голос
/ 23 апреля 2020

Это очень просто для вас. Не нужно усложнять.

$homework->save(); // I save it

После этой строки используйте только

$progress = newProgress([
    'user_id' => auth()->user()->id,
    'homework_id' => $homework->id, // I need this for the relationship to work.
    'title' => 'Initial Progress',
    'description' => 'This progress is auto-generated when you create an assignment',
    'username' => auth()->user()->name,
    'progress' => $homework->progress
]);

Вам не нужна эта строка кода

$homeworkid = Homework::where('id', $id)->first(); // I try to retrieve it, but I'm not sure how to get it as I need to define `$id`.
0 голосов
/ 23 апреля 2020

$ data = $ homework-> save ();

Получите идентификатор следующим образом: $ data-> id

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