Здравствуйте! Пожалуйста, помогите мне решить одну проблему. Я создаю новую запись и мне нужно получить ее ID для реализации отношения "многие ко многим". Как я могу узнать ID этой записи, которую я создаю? Помню, что на Laravel было какое-то решение, но я не могу его вспомнить. Можете подсказать? Спасибо!
Здравствуйте! В Laravel, когда вы создаете новую запись с помощью метода `save()` или `create()`, после успешного сохранения модели экземпляр модели автоматически получает свой ID. Это достаточно просто, и вот как это можно сделать: 1. **Использование метода `create`:** Если вы используете метод `create`, вы можете сохранить новую запись и сразу получить ее ID: ```php $newRecord = ModelName::create($data); $newRecordId = $newRecord->id; ``` 2. **Использование метода `save`:** Если вы создаете экземпляр модели и затем сохраняете его, вы также сможете получить ID после сохранения: ```php $model = new ModelName(); $model->fill($data); $model->save(); // Сохраняем модель $newRecordId = $model->id; // Получаем ID после сохранения ``` После того как вы получили ID новой записи, вы можете использовать его для создания отношений "многие ко многим". Если у вас есть таблица промежуточной модели для "многие ко многим", вы можете сделать это следующим образом: ```php $newRecord = ModelName::create($data); $newRecordId = $newRecord->id; // Пример связи с другой моделью $relatedModel->newRecords()->attach($newRecordId); // Где newRecords - это метод связи в другой модели ``` Таким образом, когда вы создаете новую запись и сохраняете её, вы получаете доступ к её ID и можете использовать его для дальнейших манипуляций с отношениями. Если у вас возникнут дополнительные вопросы, не стесняйтесь спрашивать!
Просто <br/> <pre><code class="php">$edition = new Edition; ........................ $edition->save(); $id = $edition->id;</code></pre> <br/> Я наверно не понял вопрос? ))) <br/> <br/> UPD: <br/> Почитал комментарии: <br/> <code class="php">$user_id = Auth::id();</code> <br/> UPD2: <br/> Дочитал комментарии...запутался )))
Если это стандартый автоинкремент, и есть гарантии, что не будет одновременно более одной вставки, можно получить следующий id <br/> <pre><code class="php">$statement = DB::select("SHOW TABLE STATUS LIKE 'table_name'");
$nextId = $statement[0]->Auto_increment;</code></pre> <br/> <a href="https://dev.mysql.com/doc/refman/8.4/en/show-table-status.html" rel="nofollow">https://dev.mysql.com/doc/refman/8.4/en/show-table...</a>
При сохранении модели в БД, фреймворк автоматически получает её id, и он становится доступным через одноимённое поле. <br/> Как уже писали выше, делает это вот так <br/> <pre><code class="php">$myModel->save(); echo $myModel->id;</code></pre> <br/> Когда вам нужно записать данные в связанные таблицы, то вам определённо нужено делать это последовательно. <br/> Вы не можете сначала сохранить строку в связанную таблицу с вымышленным id, а потом сохранить модель в первую таблицу с этим id - проверка целостности не позволит использовать несуществующий foreign key. <br/> Поэтому код сохранения нескольких связанных записей нужно свести к <br/> <pre><code class="php">$myModel->save(); $relatedModel = new RelatedModel(); $relatedModel->my_model_id = $myModel->id; $relatedModel->save();</code></pre> <br/> <br/> Если вдруг, как-то так получилось, что как-то невообразимым образом при сохранении первой модели нужно знать id второй модели, а при созранении второй - id первой, то у вас проблема - схема БД и логика приложения неправильные. <br/> Если это какое-то легаси, не ваше, которое нельзя исправить и просто надо как-то доработать, ну тогда поверх одних неправильных решений придётся делать свои осознанно "неправильные" решения, например отказываться от FK на поле, делать его nullable, разбивать сохранение записи на несколько этапов - сначала все данные без id связи, потом отдельно id связи после того как она сама будет создана в БД. <br/> Ну это так, мысли вслух про странные случаи. <br/> <br/> И опять же, как уже писали, для правильно реализованных моделей есть функции-хелперы, упрощающие связывание моделей <br/> <pre><code class="php">$myModel->save(); $myModel->relatedModels()->attach($relatedModel);</code></pre>