twodevs / search-query-builder
1.0.5
2015-05-19 11:37 UTC
Requires
- php: >=5.4
- doctrine/dbal: ~2.5
- doctrine/orm: ~2.5
- nesbot/carbon: ~1.18
- symfony/event-dispatcher: ~2.6
Requires (Dev)
- phpunit/phpunit: ~4.6
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());