2012-10-23 3 views
1

가 좋아,이 쿼리를 얻었다는 (전혀 미세 삽입 작품 ...) (사용 그레스는)Zend Database 삽입 된 행의 마지막 ID입니다.

$db = Zend_Db_Table::getDefaultAdapter(); 
$data = array(
    "comment_id" => new Zend_Db_Expr("nextval('comments_comment_id_seq')"), 
    "comment" => $comment, 
    "comment_level" => 1, 
    "is_active" => true, 
    "status" => 0, 
    "id" => $id, 
    "user_id" => $_SESSION['role']['user_id'], 
    "ts_create" => $created, 
    "ts_mod" => $created 
); 
$db->insert($this->_name, $data); 
$newID = $db->lastInsertId(); 

난 심지어 시도

$newID = $db->insert($this->_name, $data); 

그리고는 ID의 값을 얻을 수 없다 . 그것의 mysql (i) 그래서 나는 나의 첫 번째 문제라고 생각한다. postgres는 필자가 atleast로 작업하는 데 익숙해 져있는 방식으로 자동 특성을 갖고있는 것처럼 보이지 않는다. 그래서 나는 여기있는 누군가가 나를 도울 수 있기를 바라고 있습니다. 어쨌든 새로운 삽입 된 항목에 "comment_id"열 ID를 얻으시겠습니까? 왜냐하면 지금은 lastInsertID를 시도하고 false 나 1이면 잘못된 값을 얻습니다.

답변

5

음 GordonM은 zend에 대한 특정 문서의 방향으로 나를 지적했습니다. 그 책을 읽으면서 내가 필요한 것을 찾을 수있었습니다. 불행히도 아무도 실제 답변을 제공하지 않았습니다. 그래서 나는 내 자신의 질문에 답할 것입니다. 사람들이 제가 지금 막 비슷한 위치에 머물러있을 때 비틀 거리는 사람들을 위해. 그러나 올바른 방향으로 나를 데려 오기 위해 고든 맥에게 유권자 투표를 할 것입니다. 감사합니다 GordonM

변경하기 :

$newID = $db->insert($this->_name, $data); 

사람 : PostgreSQL의가 제공하는

$newID = $db->lastSequenceId('comments_comment_id_seq'); 
+1

'INSERT ... RETURNING', 젠드 정말 생성 된 ID를 얻을 것을 사용해야하므로. 어쩌면 기능 요청을 제출해야합니까? –

+0

나는 그저 그런 것을 할 수도있다. – chris

2

Zend documentation에서 자동 증가 (예 : Postgres)를 생성하는 시퀀스를 사용하는 데이터베이스는 lastInsertId() 호출에서 이름순으로 시퀀스를 지정해야합니다.

0

자동 증가 필드는 PostgreSQL에서 시퀀스로 구현되며 데이터베이스는 새 값을 삽입 할 때이 시퀀스에서 읽습니다. 올바른 값을 얻기 위해 lastInsertId()를 호출 할 때 해당 시퀀스의 이름을 사용해야합니다.

관련 문제