antoniosam/easy-doctrine

用于分页Doctrine简单实体的类。

v1.0 2020-04-02 20:34 UTC

This package is auto-updated.

Last update: 2024-09-29 05:22:25 UTC


README

用于分页Doctrine简单实体的类

安装

composer require antoniosam/easy-doctrine

使用

该类编译通用的方法以实现简单的分页

$paginar = new EasyDoctrine($em,Entity::class);
$paginar->setPage(1);
$paginar->order('name','ASC');
$paginar->execute();

$info = $paginar->getResult();

setPage

如果将页面 setPage 输入为 0,则不会分页响应并执行没有 limitoffset 的查询

响应

执行查询后,响应是一个EasyData数据类,包含获取到的数据

(EasyData) 
    $result->totalrecords = 100;
    $result->data = DoctrineArray;
    $result->page = 1;
    $result->pages = [1,2,3];
    $result->totalpages = 3;
    $result->itemsbypage = 20;
    $result->firstrecord = 1;
    $result->lastrecord = 10;

工作原理

where($campo,$comparacion,$valor) 方法内部执行一个指令

->andwhere('campo comparacion :contador')->setParameter('contador',$valor);
ej.
->andwhere('a.name = :donde1')->setParameter('donde1','Sara');

search($valor,$campos) 方法内部执行一个指令

->andwhere('campo1 LIKE buscar OR campo2 LIKE buscar OR campo_n LIKE buscar')->setParameter('buscar',$valor);
ej.
->andwhere('a.name LIKE :buscar OR a.email LIKE :buscar')->setParameter('buscar','Sara'.'%');

order($columna,$orden) 方法内部执行一个指令

->orderby('columna','orden');
ej.
->orderby('a.name','ASC');

完整示例

首先获取控制器接收的信息

$pagina = $request->get('pagina', 1);
$columna = $request->get('columna', null);
$orden = $request->get('orden', null);
$buscar = $request->get('buscar', null);

指定排序类型

字段列表应该是一个仅包含实体属性的数组

$campos = ['id','name' ,'lastname', 'email', 'gender','active', 'created_at'];
$col =  (!is_null($columna) && $columna != '')?$campos[$columna]:'id';
$ord = (!is_null($columna) && $columna != '')?$orden:'ASC';

实例化并添加必要的条件

$em = $this->getDoctrine()->getManager();
        
$paginar = new EasyDoctrine($em,Entity::class);
$paginar->setPage($pagina);
$paginar->where('active','=',true);
if(!empty($buscar)){
    $paginar->search($buscar,['name','email']);
}
$paginar->order($col,$ord);
$paginar->execute();

$info = $paginar->getResult()

左连接

该类允许添加一个关联并用于排序或应用某些条件。必须首先执行 leftJoin($campo,$indicador) 方法,指明具有关联的字段以及与 ab 不同的指示符

$campos = ['municipio','delegacion','direccion', 'numero', 'colonia'];
$col =  (!is_null($columna) �� $columna != '')?$campos[$columna]:'direccion';
$ord = (!is_null($columna) �� $columna != '')?$orden:'ASC';
 
$paginar = new EasyDoctrine($em,Casa::class);
$paginar->setPage($pagina);
if(!empty($buscar)){
    $paginar->search($buscar,['direccion','colonia']);
}
if($col == 0){
    $paginar->leftJoin('delegacion','d');
    $paginar->leftJoin('municipio','m','d');
    $paginar->ordenar('nombre','ASC,'m');
}else{
    $paginar->ordenar('campo','ASC');
}
$paginar->execute();

从实体“Casa”中查找“casa -> delegacion”的关系

然后查找“delegacion -> municipio”的关系

然后进行排序

->leftJoin('a.delegacion', 'd')
->leftJoin('d.municipio', 'm')
->orderby('m.nombre', 'ASC')