2013-07-30 6 views
1

레코드를 삽입하기 전에 마지막으로 삽입 된 ID를 얻을 수있는 동작을 구현하려고합니다.삽입하기 전에 마지막 ID 가져 오기

액션은 기본적으로 마지막으로 삽입 된 ID를 얻은 다음 1을 추가하여 현재 데이터에 삽입 된 값을 사용합니다.

이 나는 ​​입수했습니다 및 오류가 나는이

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

모든 무엇입니까 오류입니다

 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 

     } 
    } 

을 저장하기 전에 여기에 함수를 호출

//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; 
} 

을 얻고 얼마나 도움을 주시면 감사하겠습니다. 감사합니다

+0

먼저 삽입 한 다음 ... id가 auto_incrementing 기본 키라고 가정하고 새로 제공된 id를 사용하십시오. – Orangepill

답변

4

"삽입 전 마지막 ID"와 같은 것은 없습니다.
그리고 너는 필요 없어.

먼저 레코드를 삽입하고 ID를 받으십시오. 이것이 작동하는 방식입니다.

+0

다음과 같은 이유가 있습니다. 두 사용자가 동시에 웹 사이트를 사용한다고 상상해보십시오. 두 사용자 모두 "다음 ID = 2"또는 이와 유사한 메시지를 받게됩니다. 그리고 그 것처럼 당신은 이미 당신의 응용 프로그램을 깨뜨렸을 것입니다;) – Sam

+0

나는 당신의 추론을 얻었고 그것은 매우 유효합니다. 당신이 제안한대로 마지막으로 삽입 된 ID를 얻은 결과로 업데이트 작업을 수행하여 열을 업데이트했습니다. 즉, course_code라는 열이 있는데, 삽입 한 후 마지막으로 삽입 한 ID로 업데이트합니다. 그게 효과가 있니? –

+0

@LawrenceMacharia 네, 작동해야합니다. 어떻게해야할까요. 이 course_code 필드가 다른 테이블에 있기를 바랍니다. 그렇지 않으면 나는 같은 것을 사용하지 않는다. –

0

기본 데이터베이스 (postgressql, mysql 등)에 대해서는 언급하지 않았습니다. 나는 MySQL에 대해 더 잘 알고있다. Perl과 PHP AIP에는 "마지막 행 ID"기능이 있습니다. 예를 들어, php는 "mysqli_insert_id()"를 가지고 있습니다. 이것은 rowID가 AUTO_INCREMENT 컬럼임을 전제로합니다. 다른 DB는 다른 요구 사항을 가질 수 있습니다.

+0

mysql 데이터베이스를 사용하고 있습니다. –

관련 문제