이것은 내 첫 번째 질문입니다. 그러나 많은 도움을 얻을 수 있기를 바랍니다. 그래서 며칠 전에 직면 한 문제가 있습니다.사용자 정의 양식 필드 유형 및 사용자 정의 함수
프로젝트의 경우 사용자가 숫자 범위를 선택할 수있는 사용자 지정 양식 필드가 필요합니다.
예 : 내가 잘 내 사용자 지정 양식 필드 유형을 작성 관리했습니다
Number: greater-than 3 and lower-or-equal-than 5
. 나는 Where 절을 추가하고 저장소 전체를 수정 한 저장소에 사용자 지정 메서드를 만들었습니다.
최근 내 프로젝트에 여러 다른 장소에 동일한 구성 요소가 필요했습니다. 이제 복제가 싫어서 DQL을 수정하는 논리가 중앙 위치에 있어야한다고 결정했습니다. Doctrine에서 제공하는 기능에 따르면, 이것은 UDF (사용자 정의 함수) 여야합니다.
나는 UDF를 구현하려고 시도했지만 아무 소용이 없었다.
Doctrine ORM 패키지의 Parser 및 Lexer 구성 요소를 배우고 사용할 수 있지만 필자는이 정도면 충분하지 않은 것 같습니다. 내가 잘 구문 분석을 해요,하지만 Doctrine2는 조건 연산자 후를 필요로
SELECT sometable.* FROM sometable sometable
WHERE someProperty > 3 AND someProperty <= 5
:
SELECT something FROM SomeBundle:Something something
WHERE in_range(someProperty, gt, 3, lte, 5)
그것은으로 변환 할 수 있습니다
깊이에 설명하기 위해, 여기에 결과 쿼리입니다 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는 "공급 업체 특정 기능 구현"에 사용하기위한 것입니다. 아마도 나는 내 문제에 대한 올바른 해결책을 찾고 있지 않습니다. 어떤 제안?
사용자는 비교 조건을 지정할 수 있어야하고,()보다 크거나 같음 및 낮음 또는 같음을 강제합니다. 다른 어떤 방법으로 성공하지 못하면 이것은 나의 후퇴 일 것이다. –