espend/zend-db-bundle

包装ZendDb到Symfony2和Doctrine

dev-master 2013-04-01 14:13 UTC

This package is auto-updated.

Last update: 2024-08-29 03:35:24 UTC


README

Build Status

封装Zend/Db到Symfony2和Doctrine的Bundle,以便您可以使用Entity和Repository名称作为表别名。

安装

安装是一个简单的两步过程

  1. 使用composer下载ZendDbBundle
  2. 启用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