Подтвердить что ты не робот

Что эквивалентно getLastInsertId() в CakePHP?

Если я выполняю getLastInsertId() сразу после save(), он работает, но в противном случае это не так. Это продемонстрировано в моем контроллере:

function designpage() {
    //to create a form Untitled
    $this->Form->saveField('name','Untitled Form');
    echo $this->Form->getLastInsertId(); //here it works
}

function insertformname() {
    echo $this->Form->getLastInsertId(); //this doesnt echo at all
}

Пожалуйста, предложите способ получить необходимую функциональность.

4b9b3361

Ответ 1

CakePHP имеет два метода для получения последнего вставленного id: Model::getLastInsertID() и Model::getInsertID(). На самом деле эти методы идентичны, поэтому на самом деле не имеет значения, какой метод вы используете.

echo $this->ModelName->getInsertID();
echo $this->ModelName->getLastInsertID();

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

Ответ 2

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

$this->Model->id;

Ответ 3

В Cake последний идентификатор вставки автоматически сохраняется в свойстве id модели. Поэтому, если вы просто вставили пользователя через модель User, последний идентификатор вставки можно получить через $User- > id

id - Значение идентификатора первичного ключа запись, что эта модель в настоящее время указывая на. Автоматически после вставки в базу данных.

Подробнее о свойствах модели в Документах CakePHP API: http://api.cakephp.org/2.5/class-AppModel.html

Изменить: я только понял, что Model:: getLastInsertID() по существу то же самое, что Model- > id

Посмотрев на свой код более внимательно, трудно точно сказать, что вы делаете с различными функциями и где они существуют в великой схеме вещей. Это может быть скорее проблемой объема. Вы пытаетесь получить доступ к последнему идентификатору вставки в двух разных запросах?

Можете ли вы объяснить поток вашего приложения и как он относится к вашей проблеме?

Ответ 4

Вам нужно будет сделать вставку (или обновить, я полагаю), чтобы getLastInsertId() вернул значение. Не могли бы вы вставить больше кода?

Если вы вызываете эту функцию из другой функции контроллера, вы также можете использовать $this->Form->id для получения требуемого значения.

Ответ 5

это лучший способ узнать последний вставленный идентификатор.

$this->ModelName->getInsertID();

другой способ использует

$this->ModelName->find('first',array('order'=>'id DESC')) 

Ответ 6

Существует несколько способов получения последнего вставленного идентификатора первичного ключа при использовании метода сохранения

$this->loadModel('Model');
$this->Model->save($this->data);

Это вернет последний вставленный идентификатор текущей модели модели

$this->Model->getLastInsertId();
$this->Model-> getInsertID();

Это возвращает последний вставленный идентификатор модели с заданным именем модели

$this->Model->id;

Это вернет последний вставленный идентификатор последней загруженной модели

$this->id;

Ответ 7

Попробуйте использовать этот код в своем классе модели (возможно, в AppModel):

function get_sql_insert_id() {
   $db =& ConnectionManager::getDataSource($this->useDbConfig);
   return $db->lastInsertId();
}

Caveat emptor: функция MySql LAST_INSERT_ID() работает только с таблицами с полем AUTO_INCREMENT (иначе она возвращает 0). Если ваш первичный ключ не имеет атрибута AUTO_INCREMENT, это может быть причиной ваших проблем.

Ответ 8

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

$variable = $this->ModelName->getLastInsertId();

в PHP native, попробуйте это.

$variable = mysqli_insert_id();

Ответ 9

Это вернет последний вставленный идентификатор последней загруженной модели

$this->id;

Это возвращает последний вставленный идентификатор модели с заданным именем модели

$this->Model->id;

Это вернет последний вставленный идентификатор текущей модели модели

CakePHP имеет два метода для получения последнего вставленного id: Model::getLastInsertID() и Model::getInsertID().

echo $this->ModelName->getInsertID();
echo $this->ModelName->getLastInsertID();

Ответ 10

Ниже приведены параметры:

echo $this->Registration->id;

echo $this->Registration->getInsertID();

echo $this->Registration->getLastInsertId();

Здесь вы можете заменить Registration на свое имя модели.

Спасибо

Ответ 11

Используйте этот

function designpage() {
//to create a form Untitled
$this->Form->saveField('name','Untitled Form');
echo $this->Form->id; //here it works

}

Ответ 12

Вы можете получить последний вложенный идентификатор разными способами. Подобно названию модели User, лучший способ получить последний вставленный идентификатор -

$this->User->id; // For User Model

Вы также можете использовать функцию модели, но ниже код вернет последний вставленный идентификатор модели с заданным именем модели для этого примера, он вернет данные модели пользователя

$this->User->getLastInsertId();
$this->User->getInsertID();

Ответ 13

Когда вы используете save(), последний идентификатор вставки устанавливается в свойство моделей $id. Итак:

if ($this->Model->save()) {
    printf('Last insert ID was %s', $this->Model->id);
}

Ответ 14

Каждый раз, когда на модель вызывается метод сохранения, торт внутренне вызывает Model:: getLastInsertId() и сохраняет результат в идентификаторе атрибута класса модели, поэтому после вызова save() нет необходимости вызывать Model:: getLastInsertId ( ) или inserId(), так как это значение можно получить непосредственно таким образом

$id = $this->id;// within a model
$id = $this->{$this->modelName}->id;// in a controller

Ответ 15

После ввода данных мы можем использовать следующий код для получения недавно добавленного идентификатора записи:

    $last_insert_id=$this->Model->id;

Ответ 16

каждый раз, когда вы выполняете операцию вставки в любой модели, торт внутри fetchesthe последний атрибут вставки Id и Sets to Model- > id.

чтобы получить доступ к нему напрямую с помощью $Model- > id;, не нужно снова запрашивать lastInsertId.

Ответ 17

Я думаю, что он работает с getLastInsertId(), если вы используете таблицы InnoDB в своей базе данных MySQL. Вы также можете использовать $this->Model->id

Ответ 18

$Machinedispatch = 
   $this->Machinedispatch->find('first',array('order'=>array('Machinedispatch.id DESC')));

Самый простой способ найти последнюю вставленную строку. Для меня getLastInsertId() это не работает.

Ответ 19

Это интересно, я также наткнулся на эту проблему. То, что вы спросили, возможно, как получить последний идентификатор определенной модели, независимо от ее состояния, независимо от того, была ли она вставлена ​​или нет. Чтобы понять, что делает getInsertID, нам нужно взглянуть на источник:

Ссылка 1: http://api20.cakephp.org/view_source/model#line-3375

public function getInsertID() {
  return $this->_insertID
}

Yup, это единственный фрагмент кода внутри этой функции. Это означает, что cakephp кэширует любой последний вставленный идентификатор, а не извлекает его из базы данных. Вот почему вы ничего не получаете, если используете эту функцию, когда вы не сделали никакого создания записи на модели.

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

Добавьте функцию lastID() в AppModel, как показано ниже, чтобы ее можно было использовать в системной области. Он имеет ограничение, которое нельзя использовать для модели с составным первичным ключом.

class AppModel extends Model {
  public function lastID() {
    $data = $this->find('first', 
      array(
        'order' => array($this->primaryKey . ' DESC'),
        'fields' => array($this->primaryKey)
      )
    );

    return $data[$this->name][$this->primaryKey];
  }
}

Оригинальный источник: классная модель

Ответ 20

На самом деле вы используете getLastInsertId или getInsertId неправильно. getLastInsertId() предназначен для работы только после метода save(). Он даже не будет работать после ручной вставки, поскольку механизм торта хранит mysql_insert_id под $this → _ insertID внутри метода сохранения, который может быть получен через getLastInsertId или getInsertId. Теперь в вашем случае

$this->Model->id

ИЛИ

$this->Model->find('first',array('order'=>'id DESC')) 

Будет делать.

Ответ 21

В CakePHP вы можете получить его: Model:: getInsertID()//Возвращает идентификатор последней записи, вставленной в эту модель. Model:: getLastInsertID()//Псевдоним getInsertID().

Ответ 22

$this->Model->field('id', null, 'id DESC')