2009-09-11 5 views
1

나는 데시벨이 내 테이블은 다음과 같이 : 내가하고 싶은 것은 해당 쿼리의 간단한 부분은해야 의미 제조업체 이름 열 A. 로 시작하는 모든 모델을 얻을 수 있습니다ZF 테이블 인터페이스에서 조인 된 쿼리를 수행하는 방법은 무엇입니까?

alt text http://img15.imageshack.us/img15/2568/stackdijag.png

$ manufacturers-> fetchAll ("name like $ letter % '")와 같아야합니다;

내가 ZF 관계로 이러한 목표를 달성하기 위해 노력하고 있지만 않을 것이다, 그래서 도움이 어떤 종류의 환영 ...

답변

4
$models = new Models(); 
$select = $models->select(Zend_Db_Table::SELECT_WITH_FROM_PART); 
$select->setIntegrityCheck(false) 
     ->join(array("a"=>"manufacturers"), 'models.manufacturer_id = a.id', 
     array("man_name"=>"name", "man_description"=>"description")) 
     ->where("a.name LIKE 'A%'"); 
$rowset = $models->fetchAll($select); 

는 불행하게도 Zend_Db_Table 관계 인터페이스는 훨씬 지능이없는 선언 된 참조 맵에서 조인 된 쿼리를 만드는 것과 관련됩니다. 커뮤니티가 제공하는 복잡한 쿼리의 솔루션은 Zend_Db_Table_Select 쿼리 팩토리입니다.

제조업체의 이름과 설명에 대해 별칭을 지정해야합니다. 그렇지 않으면 이러한 열은 모델의 이름과 설명을 행 데이터의 연관 배열에 표시하지 않습니다. 이 문제를 방지하려면 열의 이름을 분명히 지정해야합니다.

그러나 귀하의 경우

, 나는 테이블 인터페이스와 선택 인터페이스를 건너 뛰고 단순히 DB 어댑터를 사용하여 SQL 쿼리를 직접 실행하는 것 :

$data = $db->fetchAll(" 
    SELECT m.*, a.name AS man_name, a.description AS man_description 
    FROM Models m JOIN Manufacturers a ON m.manufacturer_id = a.id 
    WHERE a.name LIKE 'A%'"); 

당신은 간단하게 데이터를 다시 얻을 것이다를 연관 배열의 배열이며 Zend_Db_Table_Rowset이 아닙니다. 그러나 조인 된 행 집합은 어쨌든 쓰기 가능하지 않기 때문에 많은 것을 희생하지 않았습니다.

+0

"그러나 조인 된 행 집합은 쓰기가 가능하지 않으므로 많이 희생하지 않았습니다." Zend_Db_Table_Row 원칙이 가장 단순한 경우를 제외하고 대부분의 경우에 가장 중요한 점입니다. –

+0

@tomas : "+ +"연산자는 곱셈이나 나눗셈을 정상적으로 수행하지 않습니다. 그것은''sux? 아니면 그 직업에 적합한 도구가 아닌 것입니까? –

+0

조인 된 행 집합을 쓸 수없는 이유는 무엇입니까? 일부 데이터베이스는 조인을 사용하여 업데이트 쿼리를 지원합니다. – troelskn

관련 문제