skrip42 / advanced-repository
Symfony relation find repository
v2.3.1
2020-12-29 07:25 UTC
Requires
- php: ^7.1.3
- doctrine/doctrine-bundle: ^2.1
- doctrine/orm: ^2.7
README
Суть этой приблуды - предоставить возможность делать запросы с джойнами так же легко как просто запросы по параметрам
есть 2 метода:
- 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::' // определено ]
В завершении замечу, что тут крайне сырой и некрасивый код, по суть это прототип из которого уже нужно лепить полноценный компилятор запросов, но я ленивая жопа и наврятле когданибудь это сделаю