2011-02-06 4 views
2

아래에 지정된 몇 가지 기준을 충족시키는 PHP (이 아닌 ORM!) 용 쿼리 작성 엔진을 찾고 있습니다. 불행히도, Doctrine, Propel, Adodb, Zend_Db 등을 살펴본 후에 프로파일에 실제로 맞는 것을 찾지 못했습니다. 너무 추상적입니다 (ORM 수준의 추상화가 필요하지 않습니다). 또는 충분한 기능을 지원하지 않습니다. . 필요한 것은 프로그래밍 방식으로 SQL 쿼리를 빌드 할 수있는 라이브러리입니다. 실행하는데도 필요하지 않지만 그래도 괜찮습니다.PHP SQL 쿼리 빌딩 엔진

정말 바퀴를 다시 발명하는 것을 피하고 싶습니다. 프로필에 맞는 것을 알고 있다면 앞으로 가져 오십시오. 위의 이름을 가진 사람들 중 한 사람이 적합하다고 생각한다면 나에게도 알려주십시오.

이 (라이브러리가없는 경우, 나를 위해하지 유용)이 있어야합니다

  • 지원 PHP 5.2
  • 지원 (네임 스페이스 라이브러리는 불행하게도, 지금은 사용할 수 없습니다) 등 선택 식, 주문에 의해, 제한, 그룹별로 갖는, 노동 조합, 외부 조인을 포함한 프로그램 쿼리 생성,
  • 지원 MySQL은 오라클 OCI8, MSSQL, DB2, Postrges
  • 지원 건물라는 이름의 매개 변수화 쿼리필요한 경우 적절한 물론과 (등, 적절한 비교 함수를 사용하여 제대로 수신/발신 데이터를 포맷, 예를 들면 -준비 문
  • 지원 추가 조건은/어느 시점에 동적으로 등 날짜, 같은 데이터 유형에 대한
  • 지원을 조인 인용). 우리는 코드의 모든 필드 유형을 알고 있으므로 라이브러리는 각 필드가 무엇인지 말해 줄 수 있어야합니다.
  • 독립형 (기타 지원 클래스의 톤없이 사용하기 쉬운)
  • 쉽게 확장 할 라이센스가 BSD-같은 용어
  • 청소 PHP 5 코드 (NO PHP 4 객체 별 심판 cruft에에 확장 허용, 등)

NICE는은 (우리가들 "이 있어야합니다"위에 그것을 구현할 수 가지고 있지만, 이미 수행 된 경우

  • 지원 매개 변수화 queri를 인스턴스화) 더 행복 할 것 es (전체 & 부분) - 즉, 매개 변수의 일부분을 제공하고 대체 된 매개 변수로 새 쿼리를 생성하는 쿼리 지원을 작성한 후
  • 두 개의 쿼리를 병합하는 지원 그들을 parametrizing를 포함하는 하나 개의 쿼리에서 다른에 조건 테이블)
  • 지원 쿼리 코멘트()

보너스 (이 정말 우리를 행복하게 만들 것,하지만 지금은 그것없이 살 수)

추가
  • 지원 직렬화는
  • 지원 캐싱

그래서, 않습니다 그 라이브러리를 아는 사람이 있습니까?

+3

실격 [Zend_Db] (http://framework.zend.com/manual/en/zend.db.select.html)을 물어볼 수 있습니까? 그것은 당신이 묘사하고있는 것과 맞는 저수준의 메소드를 가지고 있습니다 :'$ select-> from (..) -> where (..) -> groupBy (..)'. 그것은 (대부분은 아니지만) 지정된 데이터베이스를 지원하는 PDO를 사용하며, 내가 이해하는 바에 따라 합리적으로 독립적입니다. –

+0

@Mike : AFAIK 데이터 형식을 지원하지 않으며 명명 된 매개 변수가 아닌 위치 매개 변수 만 지원합니다. 적어도 그것이 내가 문서들과 코드에서 얻는 것입니다. 어쨌든 그것을 사용하고 그것을 지원하기 위해 확장을 고려 중이지만 이미 가지고있는 것이 있다면 그것을하고 싶지 않습니다. – StasM

+0

그 중 일부는 라이브러리가 있습니다. 예 :'Person :: name ('billy') -> join (Town :: table(), Town :: id(), SQL :: OP_EQUAL, Persion :: town_id()) -> group_by (Town :: id – Petah

답변

3

CodeIgniter는 당신이 무엇을 찾고 있는지에 대한 안전한 내기이다 : 그것은 당신이 무엇을해야하는 코어의에서 또한 http://codeigniter.com/user_guide/database/active_record.html

, 그것은 쉽게 확장 할 수 있습니다. 또한 쿼리 캐싱 (보너스 아이템 중 하나)이 있습니다.

+0

ActiveRecord가 필요하지 않습니다. 쿼리 생성기 만 있으면됩니다. 저는 API 정의가 너무 맘에 들지 않습니다. 예를 들어, 'or_where_not_in'과 'or_not_like'메소드를 따로 따로 두는 것처럼, 매개 변수화 된 쿼리 지원을 볼 수 없었습니다. 또한 그들의 코드는 evals를 사용하고 참조로 객체를 전달합니다. – StasM

+2

@StasM 그렇습니다. 에버를 사용하여 데이터베이스 클래스를로드하지만 쿼리 데이터 나 사용자 입력에는 사용되지 않습니다. 그들은 분명히 분리되어 있습니다 ... 결코 두 가지가 만날 수 없습니다. 또한 일부 핵심 기능 (예 :'or_where_not_in')이 마음에 들지 않으면 사용하지 마십시오. 라이브러리를 확장하고 직접 작성하십시오. 어느 쪽이든, 행운을 비네! – seangates