如何在 Zend 框架中轻松实现查询?
6 回答
检查这个文件:
Zend 框架数据库快速入门 (PDF)
您可以使用doctrine2 Doctrine 项目。有一个与 ZF3 DoctrineModule兼容的模块。您可以使用 QueryBuilder 将查询的创建带到对象操作中。
使用 Zend_Db 并使用 Zend_Db 工厂方法创建一个 $db 对象,然后使用 Zend_Db_Select 类创建 SQL 语句并将 $select SQL 语句传递给 fetch* (fetchRow, fetchAll...) 方法。
您可以像这样使用 Zend Db Adapter 对象:
$sql = 'SELECT * FROM bugs WHERE bug_id = ?';
$result = $db->fetchAll($sql, 2);
1.配置:
配置/自动加载/dbAdapter.local.php
<?php
return array(
'db' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=name;host=localhost',
'username' => 'root',
'password' => 'root',
),
'service_manager' => array(
'abstract_factories' => array(
'Zend\Db\Adapter\AdapterAbstractServiceFactory',
),
),
);
- 执行:
public function testAction() { $username = 'user'; $sql = "SELECT email FROM users WHERE username = ?"; $statement = $this->getDbAdapter()->createStatement($sql, array($username)); $result = $statement->execute()->current(); } protected function getDbAdapter() { if($this->dbAdapter == null) { $this->dbAdapter = $this->getServiceLocator()->get('Zend\Db\Adapter\Adapter'); } return $this->dbAdapter; }
Zend 框架有 abstract_factories,它允许我们处理多个 DB 查询:
Zend\Db\Adapter\AdapterAbstractServiceFactory
需要设置服务管理器:
'service_manager' => 数组('abstract_factories' => 数组('Zend\Db\Adapter\AdapterAbstractServiceFactory', ), ),
在 config/autoload/local.php 中配置适配器
db' => 数组('适配器' => 数组(
'database1' => array( 'driver' => 'Pdo', 'dsn' => 'mysql:dbname=userDB;host=localhost', 'driver_options' => array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'' ), ), etc... ),
),
在 config/autoload/global.php 中配置适配器
return array( 'db' => array( 'adapters' => array( 'database1' => array( 'username' => 'root', 'password' => '', ), ), ),
);
呼叫适配器
$dbmanager->get('database1');
在模型中使用
use Zend\Db\TableGateway\AbstractTableGateway; use Zend\Db\Adapter\Adapter; class UserTable extends AbstractTableGateway { protected $table ='user'; public function __invoke(Adapter $adapter) { $this->adapter = $adapter; $this->initialize(); } public function fetchAll() { $resultSet = $this->select(); return $resultSet->toArray(); }
}