Быстро найти последний элемент в базе данных Cakephp - PullRequest
0 голосов
/ 08 июня 2011

Я просто унаследовал некоторый код cakePHP, и я не очень знаком с ним (или любым другим языком php / serveride).Мне нужно установить идентификатор элемента, который я добавляю в базу данных, равным значению последнего элемента плюс один, первоначально я сделал такой вызов:

$id = $this->Project->find('count') + 1;

, но, кажется, это добавляет около 8несколько секунд до загрузки моей страницы (что кажется странным, потому что база данных содержит только около 400 элементов), но это еще одна проблема.На данный момент мне нужен более быстрый способ найти идентификатор последнего элемента в базе данных, есть ли способ найти для быстрого получения последнего элемента в данной таблице?

Ответы [ 3 ]

5 голосов
/ 08 июня 2011

Это очень плохой подход к установке идентификатора.

Вы знаете, что, например, MySQL поддерживает автоинкремент для полей INT и, следовательно, будет автоматически устанавливать идентификатор для вас?

Предлагаемые функции getLastInsertId и getInsertId будут работать только после вставки и не всегда.

Я также не могу понять, что ваш звонок добавляет 8 секунд к загрузке вашего сайта. Если я делаю такой вызов на своей таблице (которая также имеет около 400 записей), самому вызову требуется всего несколько миллисекунд. Пользователь не заметил бы задержки.

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

Также, пожалуйста, посмотрите, поддерживает ли ваша база данных автоинкремент (я не могу представить, что это невозможно), так как это было бы самым простым способом добавления требуемой функциональности.

1 голос
/ 08 июня 2011

Я бы попробовал

$id = $this->Project->getLastInsertID();
$id++;

Этот метод можно найти в файле cake / libs / model / model.php в строке 2768

, а также на этой странице SO

Ура!

0 голосов
/ 20 июля 2018

Если вы ищете решение для cakePHP3, вы просто используете last ().

е:

use Cake\ORM\TableRegistry;
....
$myrecordstable=Tableregistry::get('Myrecords');
$myrecords=$myrecordstable->find()->last();
$lastId = $myrecords->id;
....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...