2013-07-30 1 views
1

Я пытаюсь реализовать действие, которое может получить мне последний вставленный идентификатор, прежде чем вставлять запись.Получить последний идентификатор перед вставкой ZF2

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

Это, как далеко я получил и ошибки я получаю

//the action to get the last inserted id 
public function getLastID(){ 
    $lastcourseid = $this->tableGateway->select(function (Select $select){ 
     $select->columns(array('id')); 
     $select->order('id ASC')->limit(1); 
    }); 

    var_dump($lastcourseid); 


    return $lastcourseid; 
} 

я вызываю функцию здесь перед сохранением

 if($id == 0){ 
     $data['course_code'] = $this->getLastID(); 
     $this->tableGateway->insert($data); 
    }else{ 
     if($this->getAlbum($id)){ 
      $this->tableGateway->update($data, array('id' => $id)); 
     }else{ 
      throw new \Exception("Form id does not exist");//an error is thrown in case the id is not found 

     } 
    } 

Это ошибка я получаю

Catchable fatal error: Object of class Zend\Db\ResultSet\ResultSet could not be converted to string I do not know where am going wrong.

Любой помощь будет оценена. Спасибо

+0

Сначала вы должны вставить ... затем использовать вновь предоставленный идентификатор, считая, что идентификатор является первичным ключом auto_incrementing. – Orangepill

ответ

4

Нет такой вещи, как «последний идентификатор перед вставкой».
И вам это не нужно.

Сначала вставьте запись, а затем введите свой идентификатор. Вот как это работает.

+0

Чтобы привести несколько причин для этого: Представьте себе двух пользователей, одновременно использующих ваш сайт. Оба пользователя получили бы «следующий ID = 2» или что-то вроде этого. И как раз вы уже нарушили бы свою заявку;) – Sam

+0

Я получаю ваши рассуждения, и это очень важно. В результате я получил последний вставленный идентификатор, который вы предлагаете, затем выполните обновление для обновления столбца. т.е. у меня есть столбец с именем course_code, я буду обновлять его последним вставленным id после создания вставки. Будет ли это работать? –

+0

@LawrenceMacharia Да, он должен работать, и так оно и должно быть сделано. Я надеюсь, что это поле course_code находится в другой таблице. В противном случае я не вижу смысла использовать его в одном и том же. –

0

Вы не указываете базовую базу данных (postgressql, mysql и т. Д.). Я больше знаком с MySQL. Perl и php AIP имеют функции «last row id». Например, php имеет «mysqli_insert_id()». Это предполагает, что ваш rowID является столбцом AUTO_INCREMENT. Другие БД могут иметь разные требования.

+0

Я использую базу данных mysql –

Смежные вопросы