Я знаю, что получить id
из record
из db table
в CakePHP
легко. Я хочу получить «будущее» id
«будущего» record
таблицы, то есть вставить record
, но перед вставкой я хочу получить его id, который будет сгенерирован db после завершения вставки (id
- int, Auto Increment). Благодарю.CakePHP, получая идентификатор записи из таблицы db
ответ
Один из вариантов - вы можете получить текущий максимальный id из mysql, а затем просто увеличить значение. Если у вас много операций, это может вызвать некоторые проблемы с вашим сайтом. Но вы можете использовать:
$this->Model->query("SELECT MAX(id) as max FROM `your_table_name`");
Это получит вам максимальный идентификатор этой таблицы в настоящее время, то вы можете сделать +1
Другой вариант должен был бы получить идентификатор после сохранения, а затем обновить запись с этим ID. Например, у cakephp есть метод для этого.
$this->Model->getLastInsertID();
$this->Model->updateAll($fields, $conditions)
Ссылка UpdateAll: http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-updateall-array-fields-array-conditions
SELECT MAX не работает. Что делать, если между запросом времени и временем использования идентификатора вставлено 20 записей? – RichardAtHome
Да, я подумал о первой идее, но я не знал, что это может вызвать некоторые проблемы. Почему это может вызвать проблемы? Вы можете мне объяснить? И, не имеет ли CakePHP какой-либо функции или что-то, что бы дать мне последний идентификатор, перед вставкой? Не поддерживает ли CakePHP такую операцию любым простым способом? @Sixthpoint – user2387319
Как описано ниже, другие операции выполняются до того, как вы используете этот идентификатор, который вы только что вставили. Я не знал контекста, в котором вы использовали бы это. Не совсем лучшая практика для получения идентификатора перед вставкой. Но если у вас не было другого варианта, вы, вероятно, должны заблокировать таблицу, чтобы никаких других транзакций не произошло: http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html – Sixthpoint
Даже сама база данных не знает, что ID это будет не использовать до момента после сохранения записи.
Вы не можете (в многопользовательской системе) заранее спросить, что будет с идентификатором, потому что между тем, как вы спросите, каким будет идентификатор, может быть вставлено 20 других записей, а когда вы вставьте свою запись (с идентификатором, который использовался 20 записей назад.) Это называется «Состояние гонки».
Вот что произойдет:
You: DB - what's the next ID please?
DB: (Does a max() on the column) 21!
You: Great! I'll use that!
(meanwhile 20 other records get inserted by other users)
You: Hi DB, I'd like to insert this record using ID 21 like you told me!
DB: Oops - sorry - that ID has already been used :'-(
Вам не нужно знать запись заранее. Если вы правильно структурируете данные сохранения и используете метод saveAccociated() CakePHP, CakePHP введет правильный идентификатор в качестве значения внешнего ключа для всех ваших связанных данных.
Единственный способ иметь предсказуемый идентификатор - создать его самостоятельно. Помните - он ДОЛЖЕН быть ненулевым и уникальным (определение первичного ключа).
Сохранить себя много, много будущих столкновений первичных ключей и придерживаться метода торта :-)
- 1. Название веб-страницы Cakephp из таблицы db
- 2. Получить идентификатор записи таблицы
- 3. Как получить идентификатор записи из другой таблицы?
- 4. Получите идентификатор из записи таблицы Azure
- 5. CakePHP: изменение записи связанной таблицы
- 6. CakePHP HABTM SaveAll создает неправильные Db записи
- 7. CakePHP выпадающий из другой таблицы
- 8. MySQL/CakePHP DB Design Вопрос
- 9. Гиперссылка на идентификатор в строках таблицы, прочитанная из DB
- 10. Извлечь записи из таблицы
- 11. cakephp не вытягивает данные из таблицы
- 12. CakePHP: получить идентификатор IprForm из таблицы Ipr_forms и обновить строку таблицы
- 13. Вставьте недостающие записи из таблицы
- 14. Уникальный идентификатор из таблицы, присоединяясь
- 15. Как показать вид сетки данных Пусто из записи таблицы db?
- 16. Удаление определенной записи из вложенной таблицы Oracle DB
- 17. FluentNHibernate, получая 1 столбец из другой таблицы
- 18. Не получая суммы строк из таблицы
- 19. Как передать идентификатор для удаления одной записи из таблицы
- 20. Safest способа получить последний идентификатор записи из таблицы
- 21. Изменение записи значения в его идентификатор из antoher таблицы
- 22. CakePHP 3 - ассоциация таблицы DB с самим собой
- 23. Как получить записи из db?
- 24. Выбор записи из db (sqlite3)
- 25. Laravel Получить идентификатор записи из запроса обновления
- 26. Пытается получить информацию из таблицы, получая значения ресурсов
- 27. Выберите первый идентификатор из таблицы
- 28. Cakephp count содержит записи
- 29. CakePHP, получая всего много строк в Containable
- 30. Как получить идентификатор текущей записи?
Почему вы должны знать идентификатор, прежде чем вставить? В этом не должно быть необходимости. Скорее всего, ваши правила кодирования неверны, если вам нужно идентификатор перед вставкой. – BadHorsie