antoniosam / easy-doctrine
用于分页Doctrine简单实体的类。
v1.0
2020-04-02 20:34 UTC
Requires
- php: >=7.2.5
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,则不会分页响应并执行没有 limit 和 offset 的查询
响应
执行查询后,响应是一个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) 方法,指明具有关联的字段以及与 a 或 b 不同的指示符
$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')