2016-04-14 5 views
0

Der Versuch, den letzten Einsatz ID in meinem Mapper Ich habe diesen Code zu erhalten:um Geld zu Insert ID ZF2

 $sql = new Sql($this->dbAdapter); 
     $stmt = $sql->prepareStatementForSqlObject($action); 
     $result = $stmt->execute(); 

     return array('success' => $result->getAdapter()->lastInsertId()); 

Das Problem, das ich ist, dass ich einen fatalen Fehler: (!) Fatal error: Anruf zu undefinierte Methode Zend \ Db \ Adapter \ Treiber \ Pdo \ Ergebnis :: getAdapter() in /var/www/zf-skeleton/module/Application/src/Application/Mapper/ZendDbSqlMapper.php auf Zeile 100

I scheint nicht in der Lage zu sein, den Adapter zu erhalten, obwohl die Daten in der Datenbank hinzugefügt werden.

Jede Hilfe wird geschätzt.

Meine ganze Klasse:

/home/alex/development/myapplication/module/ 
    Application/src/Application/Mapper/ZendDbSqlMapper.php: 

<?php 
namespace Application\Mapper; 

use Application\Model\PdiInterface; 
use Application\Model\MiscdamageInterface; 
use Zend\Db\Adapter\AdapterInterface; 
use Zend\Db\Adapter\Driver\ResultInterface; 
use Zend\Db\ResultSet\HydratingResultSet; 
use Zend\Db\Sql\Insert; 
use Zend\Db\Sql\Sql; 
use Zend\Db\Sql\Update; 
use Zend\Stdlib\Hydrator\HydratorInterface; 

class ZendDbSqlMapper implements PdiMapperInterface 
{ 

    protected $dbAdapter; 
    protected $hydrator; 
    protected $pdiPrototype; 
    protected $miscdamagePrototype; 

    public function __construct(
    AdapterInterface $dbAdapter, HydratorInterface $hydrator, PdiInterface $pdiPrototype, MiscdamageInterface $miscdamagePrototype 
    ) { 
     $this->dbAdapter = $dbAdapter; 
     $this->hydrator = $hydrator; 
     $this->pdiPrototype = $pdiPrototype; 
     $this->miscdamagePrototype = $miscdamagePrototype; 
    } 

    public function find($id) 
    { 
     $sql = new Sql($this->dbAdapter); 
     $select = $sql->select('vehicles'); 
     $select->where(array('id = ?' => $id)); 

     $stmt = $sql->prepareStatementForSqlObject($select); 
     $result = $stmt->execute(); 

     if ($result instanceof ResultInterface && $result->isQueryResult() && $result->getAffectedRows()) { 
      return $this->hydrator->hydrate($result->current(), $this->pdiPrototype); 
     } 

     throw new \InvalidArgumentException("Vehicle with given ID:{$id} not found."); 
    } 

    public function findAll() 
    { 
     $sql = new Sql($this->dbAdapter); 
     $select = $sql->select('vehicles'); 

     $stmt = $sql->prepareStatementForSqlObject($select); 
     $result = $stmt->execute(); 

     if ($result instanceof ResultInterface && $result->isQueryResult()) { 
      $resultSet = new HydratingResultSet(new \Zend\Stdlib\Hydrator\ClassMethods(), new \Application\Model\Pdi()); 

      return $resultSet->initialize($result); 
     } 

     return array(); 
    } 

    public function getMiscdamage($id) 
    { 
     $sql = new Sql($this->dbAdapter); 
     $select = $sql->select('misc_damage')->where(array('vehicle_id = ?' => $id))->order('date_added DESC'); 

     $stmt = $sql->prepareStatementForSqlObject($select); 
     $result = $stmt->execute(); 

     if ($result instanceof ResultInterface && $result->isQueryResult()) { 
      $resultSet = new HydratingResultSet(new \Zend\Stdlib\Hydrator\ClassMethods(), new \Application\Model\Miscdamage()); 

      return $resultSet->initialize($result); 
     } 

     throw new \InvalidArgumentException("Vehicle with given ID:{$id} not found."); 
    } 

    public function saveMiscdamage($data) 
    { 
     $action = new Insert('misc_damage'); 
     $action->values(
      array(
       'vehicle_id' => $data->vehicle_id, 
       'description' => $data->description, 
       'status' => 0, 
       'added_user_id' => 1, 
       'date_added' => date('Y-m-d H:i:s') 
      ) 
     ); 

     try { 

      $sql = new Sql($this->dbAdapter); 
      $stmt = $sql->prepareStatementForSqlObject($action); 
      $result = $stmt->execute(); 

      return array('success' => $Table->getAdapter()->lastInsertId()); 

     } catch(\Exception $e) {} 

     throw new \Exception('Database error'); 

    } 

} 

Antwort

0

Ich arbeitete heraus, wie dies zu tun:

 $sql = new Sql($this->dbAdapter); // Same 
     $stmt = $sql->prepareStatementForSqlObject($action); // Same 
     $result = $stmt->execute(); // Same 
     return array('success' => $result->getGeneratedValue()); // <-- New 
0

Versuchen Sie folgendes:

return array('success' => $db->lastInsertId()); 

Oder

return array('success' => $Table->getAdapter()->lastInsertId()); 
+0

Das funktioniert nicht, weil weder '$ db' noch' $ Table' zu ​​meiner Klasse gehören. Ich habe meine Frage aktualisiert. – beingalex