espend / zend-db-bundle
包装ZendDb到Symfony2和Doctrine
dev-master
2013-04-01 14:13 UTC
Requires
- php: >=5.3.2
- doctrine/doctrine-bundle: *
- symfony/framework-bundle: >=2.1,<2.3-dev
- zendframework/zend-db: 2.*
Requires (Dev)
- doctrine/orm: >=2.2,<3.0,>=2.2.3
This package is auto-updated.
Last update: 2024-08-29 03:35:24 UTC
README
封装Zend/Db到Symfony2和Doctrine的Bundle,以便您可以使用Entity和Repository名称作为表别名。
安装
安装是一个简单的两步过程
- 使用composer下载ZendDbBundle
- 启用Bundle
第一步:使用composer下载ZendDbBundle
在您的composer.json中添加ZendDbBundle(请参阅版本:espend/zend-db-bundle)
{ "require": { "espend/zend-db-bundle": "dev-master" } }
现在,运行以下命令让composer下载Bundle
$ php composer.phar update espend/zend-db-bundle
Composer会将Bundle安装到您的项目vendor
目录中。
第二步:启用Bundle
在kernel中启用Bundle
<?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new espend\ZendDbBundle\espendZendDbBundle(), ); }
服务
所有服务都在Symfony2数据库参数的CompilerPass上生成,并附加到zend.db.manager
。由于manager支持多个连接,所以getManager()
将保留所有可能的连接。如果没有提供参数,将使用默认的连接。还有一些依赖于连接的适配器服务,例如zend.db.adapter.<name>
,如果需要在没有manager的情况下调用它,则可以通过zend.db.adapter
访问默认适配器。
基本用法
为了更好的使用和自动完成,请将此函数放在具有容器的某个位置。您应该只使用此服务,因为它自动配置为在容器参数上使用平台和驱动程序。
/** * @return \espend\ZendDbBundle\Zend\Db\ZendDbConnection */ private function getZend() { return $this->container->get('zend.db.manager')->getManager(); }
Doctrine仓库和表名
所有Doctrine实体名称都可以用于顶部的zend/db,并在查询数据库之前由Doctrine解析。
espendHomeBundle:Homework
espend\HomeBundle\Entity\Homework
espend\HomeBundle\Entity\HomeworkFood
表别名名称由实体名称生成,因此
espendHomeBundle:HomeworkFood -> homework_food.id
espendHomeBundle:Homework -> homework.id
espend\HomeBundle\Entity\HomeworkFood -> homework_food.id
SQL查询示例
选择
从数据库到结果集的演示选择语句
[ { "id":"1", "name":"name" } { "id":"2", "name":"name2" } ]
$select = $this->getZend()->getQueryBuilder()->select('espendHomeBundle:Homework'); $select->where(array( 'status' => 0, 'type' => 'cleanup', )); $this->getZend()->fetchArray($select); // return [{id:1, name:name}, {id:2, name:name2}] $this->getZend()->fetchColumn($select); // return {id:1, name:name} $this->getZend()->fetchField($select); // return 1
您还可以为选择语句设置别名,如果没有提供,则将在实体名称上生成
$this->getZend()->getQueryBuilder()->select(array('no_homework' =>'espendHomeBundle:Homework')); $this->getZend()->getQueryBuilder()->select(array('nice_homework' =>'espend\HomeBundle\Entity\Homework'));
更新
$update = $this->getZend()->getQueryBuilder()->update('espendHomeBundle:Homework'); $update->set(array( 'type' => 'todo', )); $update->where(array( 'status' => 0, )); $this->getZend()->execute($update);
插入
$insert = $this->getZend()->getQueryBuilder()->insert('espendHomeBundle:Homework'); $insert->values(array( 'status' => 1, 'type' => 'cleanup', )); $this->getZend()->execute($insert);
删除
$delete = $this->getZend()->getQueryBuilder()->delete('espendHomeBundle:Homework'); $delete->where(array( 'status' => 0, 'type' => 'cleanup', )); $this->getZend()->execute($delete);
连接
$select = $this->getZend()->getQueryBuilder()->select('espendHomeBundle:Homework'); $select->join('espendHomeBundle:HomeworkFood', 'homework.id = homework_food.id');
连接也支持别名覆盖
$select = $this->getZend()->getQueryBuilder()->select('espendHomeBundle:Homework'); $select->join(array('user' => 'espendHomeBundle:HomeworkFood'), 'user.id = homework.id');
有关更多语法示例,请参阅:Zend\Db\Sql