这是我的第一个问题,但我希望我会得到很多帮助:) 所以,这是我几天前面临的问题。自定义表单字段类型和用户定义的函数为它
对于一个项目,我需要一个自定义表单域,它允许用户选择一个数字范围。
例子:
Number: greater-than 3 and lower-or-equal-than 5
我已经成功地创建我的自定义表单字段类型就好了。我已经在我的仓库中创建了一个自定义方法,它附加了where子句的部分和整个工作。
最近我需要在我的项目中的几个其他地方非常相同的组件。现在,我讨厌重复,所以我决定修改DQL的逻辑必须驻留在一个中心位置。根据Doctrine中给出的特征,这必须是UDF(用户定义的函数)。
我继续前进,试图实施UDF,无济于事。
我已经学会了使用Doctrine ORM包的解析器和Lexer组件,但在我看来,这似乎还不够。
要深入讲解,这里是结果查询:
SELECT something FROM SomeBundle:Something something
WHERE in_range(someProperty, gt, 3, lte, 5)
它必须被转化为:
SELECT sometable.* FROM sometable sometable
WHERE someProperty > 3 AND someProperty <= 5
我很好的解析,但Doctrine2要求的条件后,运营商UDF,所以语法应该是这样的:
SELECT sometable.* FROM sometable sometable
WHERE in_range(someProperty, gt, 3, lte, 5) = 1
使用这种语法,仍然需要为所有参数(例如:gt和lte)分配值,这也将需要一个单独的功能,它将跟踪哪些参数已被分配,哪些不是。此外,这个解决方案似乎不工作,因为解析器似乎有解析我的函数参数的问题:D
我需要的只是简单的查询修饰符。
如果可能的话,我想要达到更好的语法。这样的事情是可以接受的:
someProperty is in_range(gt, 3, lte, 5)
有什么想法?预先感谢所有参与者!
P.S根据Doctrine2网站,UDF旨在用于“实现供应商特定的功能”。也许我不是在为我的问题寻找正确的解决方案。有什么建议么?
用户需要能够指定比较条件,而()之间的力量大于或等于和小于或等于。如果我没有以其他方式成功,这将是我的后备。 –