Задать вопрос
@Wsearch

Как получить id страницы до ее создания в Ларавель?

Здравствуйте! Помогите пожалуйста в моей проблеме.
Я создаю запись, у меня есть необходимость вставки id этой записи для отношения многие ко многим. Как мне узнать id той записи которую я создаю.
Было какое-то решение на ларавеле, но я подзабыл. Может кто подскажет. Спасибо.
  • Вопрос задан
  • 129 просмотров
Подписаться Простой 6 комментариев
Пригласить эксперта
Ответы на вопрос 3
@UPSA
anykey. Я не программист, я просто ленивый.
Просто
$edition = new Edition;
........................
$edition->save();
$id = $edition->id;

Я наверно не понял вопрос? )))

UPD:
Почитал комментарии:
$user_id = Auth::id();
UPD2:
Дочитал комментарии...запутался )))
Ответ написан
@Asokr
Если это стандартый автоинкремент, и есть гарантии, что не будет одновременно более одной вставки, можно получить следующий id
$statement = DB::select("SHOW TABLE STATUS LIKE 'table_name'");
$nextId = $statement[0]->Auto_increment;

https://dev.mysql.com/doc/refman/8.4/en/show-table...
Ответ написан
Комментировать
@MadridianFox
Web-программист, многостаночник
При сохранении модели в БД, фреймворк автоматически получает её id, и он становится доступным через одноимённое поле.
Как уже писали выше, делает это вот так
$myModel->save();
echo $myModel->id;

Когда вам нужно записать данные в связанные таблицы, то вам определённо нужено делать это последовательно.
Вы не можете сначала сохранить строку в связанную таблицу с вымышленным id, а потом сохранить модель в первую таблицу с этим id - проверка целостности не позволит использовать несуществующий foreign key.
Поэтому код сохранения нескольких связанных записей нужно свести к
$myModel->save();

$relatedModel = new RelatedModel();
$relatedModel->my_model_id = $myModel->id;

$relatedModel->save();


Если вдруг, как-то так получилось, что как-то невообразимым образом при сохранении первой модели нужно знать id второй модели, а при созранении второй - id первой, то у вас проблема - схема БД и логика приложения неправильные.
Если это какое-то легаси, не ваше, которое нельзя исправить и просто надо как-то доработать, ну тогда поверх одних неправильных решений придётся делать свои осознанно "неправильные" решения, например отказываться от FK на поле, делать его nullable, разбивать сохранение записи на несколько этапов - сначала все данные без id связи, потом отдельно id связи после того как она сама будет создана в БД.
Ну это так, мысли вслух про странные случаи.

И опять же, как уже писали, для правильно реализованных моделей есть функции-хелперы, упрощающие связывание моделей
$myModel->save();
$myModel->relatedModels()->attach($relatedModel);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы