简体   繁体   English

获取最后的插入ID ZF2

[英]Get last insert ID ZF2

Trying to get the last insert ID inside my mapper I have this code: 试图获取映射器中的最后一个插入ID,我有以下代码:

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

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

The problem I have is that I get a fatal error: ( ! ) Fatal error: Call to undefined method Zend\\Db\\Adapter\\Driver\\Pdo\\Result::getAdapter() in /var/www/zf-skeleton/module/Application/src/Application/Mapper/ZendDbSqlMapper.php on line 100 我遇到的问题是,我收到一个致命错误:(!)致命错误:调用/ var / www / zf-skeleton / module /中未定义的方法Zend \\ Db \\ Adapter \\ Driver \\ Pdo \\ Result :: getAdapter()第100行的Application / src / Application / Mapper / ZendDbSqlMapper.php

I don't seem to be able to get the adapter, although the data IS getting added to the database. 我似乎无法获得适配器,尽管数据正在添加到数据库中。

Any help is appreciated. 任何帮助表示赞赏。

My entire 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');

    }

}

Try this: 尝试这个:

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

Or 要么

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

I worked out how to do this: 我想出了如何做到这一点:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM