CRUD Repository

为提高开发速度,降低代码重复率,新增 2 个 CURD Trait :DBALCrudRepositoryORMCrudRepository

在 Doctrine ORM 中 ORM 依赖于 DBAL 层。ORM 调用 DBAL 并将 DBAL 返回的数组结构转化为对象。由于多了这一层转化,开发人员在使用时,可以根据使用场景和项目规模决定使用哪个Trait。

两者都是基于 Doctrine 提供的 QueryBuilder实现,不同的是:

  • DBALCrudRepository 基于 SQL Query Builder (Doctrine\DBAL\Query\QueryBuilder)

  • ORMCrudRepository 基于 DQL Query Builder(Doctrine\ORM\QueryBuilder)

DBALCrudRepository

DBALCrudRepository 基于 SQL Query Builder (Doctrine\DBAL\Query\QueryBuilder),其结果返回为数组,性能比ORMCrudRepository 略高。

trait DBALCrudRepository{
    public function save(array &$data)
    public function create(array &$data) {
    public function batchUpdate(array $filter, array $data)
    public function batchDelete(array $filter)
    public function count(array $filter=[])
    public function getList($cols='*', array $filter=[], $page = 1, $pageSize = 100, $orderBy = [])
}

使用方法如下:

<?php
namespace ItemBundle\Repositories;

use ItemBundle\Entities\ItemType;
use Doctrine\ORM\EntityRepository;
use EspierBundle\Traits\DBALCrudRepository;

class ItemTypeRepository extends EntityRepository
{
    use DBALCrudRepository;
}

ORMCrudRepository

ORMCrudRepository 基于 DQL Query Builder(Doctrine\ORM\QueryBuilder)

ORMCrudRepository 与 DBALCrudRepository 不同是 save 和 delete 方法,其输入为实体类,而不是数组。

使用方法如下:

DoctrineArrayFilter

为了兼容现有代码和大家在 ECOS 中的使用习惯,在batchUpdate、batchDelete、count和getList中的 filter数组统一由 DoctrineArrayFilter 来解析。除支持 字段|操作符 外,还支持多层嵌套的 OR 和 AND 结构。

支持结构

and

生成where 条件如下:

OR

生成where 条件如下:

多层嵌套

生成where 条件如下:

支持操作符

操作符

数据库含义

eq

=

neq

<>

lt

<

lte

<=

gt

>

gte

>=

in

in

notIn

not in

isNull

name IS NULL

isNotNull

name IS NOT NULL

like

LIKE

notLike

NOT LIKE

Last updated

Was this helpful?