获取最后插入 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
正在尝试获取我的映射器中的最后一个插入 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