获取最后插入 ID ZF2

Get last insert ID ZF2

正在尝试获取我的映射器中的最后一个插入 ID 我有这个代码:

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

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

我遇到的问题是出现致命错误:( !) 致命错误:在 /var/www/zf-skeleton/module/Application/src/Application/Mapper/ZendDbSqlMapper.php 中调用未定义的方法 Zend\Db\Adapter\Driver\Pdo\Result::getAdapter()第 100 行

虽然数据正在添加到数据库中,但我似乎无法获取适配器。

感谢任何帮助。

我整个class:

/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');

    }

}

试试这个:

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

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

我想出了如何做到这一点:

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