skrip42 / advanced-repository
Symfony 关联查找仓库
v2.3.1
2020-12-29 07:25 UTC
Requires
- php: ^7.1.3
- doctrine/doctrine-bundle: ^2.1
- doctrine/orm: ^2.7
README
这个装置的本质是提供一种方法,使得查询与关联关系一样简单,就像简单的参数查询一样
有两种方法
- protected function buildQuery(array $params)
- public function advancedFindBy(array $params)
第一种方法从参数构建查询,例如
[ 'joinedEntityName.joinedEntityFiled' => 'value', 'joinedEntityName.joinedSubEntityName.joinedSubEntityField' => 'like:value' ]
第二种方法只是将其包装并返回查询结果(方法分开以便在子类中使用buildQuery来组织自己的逻辑(例如分页器)
如上例所示,除了通过关系进行查询外,这个功能还允许设置更复杂的条件
[ 'fieldName' => 'value', // равенство 'fieldName' => 'not::value', // неравыенство 'fieldName' => 'like::value', // нестрогое соотвествие 'fieldName' => 'notLike::value', // нестрогое соотвествие с отрицанием 'fieldName' => 'in::value1,value2,value3', // вхождение в масив 'fieldName' => 'notIn::value4,value5', // вхождение в масив с отрицанием 'fieldName' => 'less::value', // меньше значения 'fieldName' => 'lessOrEq::value', // меньше или равно значению 'fieldName' => 'more::value', // больше значения 'fieldName' => 'moreOrEq::value', // больше или равно значения 'fieldName' => 'empty::', // не определено 'fieldName' => 'notEmpty::' // определено ]
最后,我要说的是,这里的代码非常原始和丑陋,本质上这是一个原型,从中需要构建一个完整的查询编译器,但我很懒惰,可能永远不会这么做