skrip42/advanced-repository

Symfony 关联查找仓库

v2.3.1 2020-12-29 07:25 UTC

This package is auto-updated.

Last update: 2024-09-07 14:57:34 UTC


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::'                // определено
]

最后,我要说的是,这里的代码非常原始和丑陋,本质上这是一个原型,从中需要构建一个完整的查询编译器,但我很懒惰,可能永远不会这么做