twodevs / search-query-builder

1.0.5 2015-05-19 11:37 UTC

This package is auto-updated.

Last update: 2024-09-19 10:12:25 UTC


README

PHP 库,用于从 JSON 格式创建 doctrine 查询。

用法

1) JSON 输入

{
  "query" : [
      {
        "type" : "group",
        "cond" : "or",
        "query" : [
          {"cond" : "or", "type" : "eq", "field" : "q.id", "value" : 1},
          {"cond" : "or", "type" : "eq", "field" : "q.id", "value" : 2}
        ]
      },
      {"cond" : "and", "type" : "eq", "field" : "q.name", "value" : "Test" },
      {"cond" : "and", "type" : "gt", "field" : "q.date", "value" : "10.04.2015" }
  ]
}

2) 创建查询构建器

// Create event dispatcher
$ed = new EventDispatcher();
$ed->addSubscriber(new EQBuilder());
$ed->addSubscriber(new CompareBuilder());
$ed->addSubscriber(new LikeBuilder());
$ed->addSubscriber(new InBuilder());
$ed->addSubscriber(new MemberOfBuilder());
$ed->addSubscriber(new IntTransformer());
$ed->addSubscriber(new DateTimeTransformer());

// Create query builder
$qb = new QueryBuilder($ed);

// Get doctrine query builder
$doctrineQB = $doctrineEntityManager
                ->getRepository('Test')
                ->createQueryBuilder('q')
                ->orderBy('q.updatedAt', 'desc')
            ;
            
// Define allowed fields and set field options
$allowedFields = [
    'q.id' => [ 'cast_int' => true ], 
    'q.name', 
    'q.createdAt' => [
        'datetime' => [ 'input' => 'd.m.Y', output' => 'Y-m-d H:i:s', 'reset' => false ] 
    ]
];

// Create query
$query = $qb->createQuery($queryData, $allowedFields, $doctrineQB);

3) 如何创建新的 LineBuilder

Line builder 构建查询。如果您需要自定义函数,请创建自己的 line builder,通过扩展 AbstractLineQueryBuilder。请查看内置的 line builder 中的一个示例。

如果您已经创建了您自己的 line builder,您只需要将您的 line builder 附加到查询构建器


$ed->addSubscriber(new CustomLineBuilder());

4) 如何创建新的 ValueTransformer

您可以使用 ValueTransformer 转换或验证传入的值。如果您想创建自己的值转换器,只需要扩展 AbstractValueTransformer。请查看内置的值转换器 中的一个示例。

如果您已经创建了您自己的值转换器,您只需要将您的转换器附加到查询构建器


$ed->addSubscriber(new CustomValueTransformer());