2009-08-24 3 views
1

Zend Framework 라이브러리에 대한 활성 레코드 패턴 (RoR/Cake와 유사)을 만들고 있습니다. 내 질문은 : 선택 개체가 테이블에 대한 별칭을 사용하고 있는지 여부를 어떻게 알 수 있습니까?Zend_Db_Table_Select에서 테이블 별칭 가져 오기

$select->from(array("c" => "categories")); 

$select->from("categories"); 

내가 자동으로 행의 관계를 얻을에 가입하고 이것 저것 추가 추가하는 "가져 오기"기능이 통과 ... 난 일부 사용자 지정 SQL을 추가 할 ; 사용자가 "보낸 사람"방법을 사용하는 방법에 따라 "c.id"또는 "categories.id"

는 내가 배열로 데이터로부터 얻을

$parts = $select->getPart(Zend_Db_Select::FROM); 

을 사용할 수 있습니다 알고, 테이블 이름 또는 별칭 말했다 배열의 "슬롯"0 것 같다. 테이블 이름 또는 별칭이 항상 슬롯 0에 있습니까? 즉, 나는 다음을 신뢰할 수있게 사용할 수 있습니다 :

$tableNameOrAlias = $parts[0]; 

죄송합니다. :)

+0

여기에 "슬롯"이라고 부르는 적절한 이름은 _index_입니다. 배열 [0]은 인덱스 0이고, 배열 [ 'c']는 인덱스 'c'입니다. – Fractalizer

답변

1

논리적으로는 어떻게 작동해야하는지 생각합니다. 안전을 위해서 Select()를 사용하여 더미 쿼리를 작성하고 print_r 등을 사용하여 부품 배열을 덤프하십시오.

난 그냥이 테스트를 수행

, 별칭은, 0부터 숫자 배열 배열의 키가 아닌입니다 :

$select = $this->db->select()->from(array("c" => "categories","d" => "dummies")); 
    $parts = $select->getPart(Zend_Db_Select::FROM); 
    echo '<pre>'; 
    print_r($parts); 
    echo '</pre>'; 

출력 :

Array 
(
    [c] => Array 
     (
      [joinType] => inner join 
      [schema] => 
      [tableName] => categories 
      [joinCondition] => 
     ) 

) 

그래서 당신이 그것을 참조 할 필요가있다 as $part["c"]

+0

흠, 깔끔하지만 내 문제는 사용자가 별칭이 지정된 테이블이나 테이블 이름으로 선택 개체를 전달하는지 여부를 알 수 없으므로 $ part [ "c"]처럼 참조 할 수 없습니다. 어쩌면 그냥 PHP의 키 ($ 배열)를 사용하여 [c]를 붙잡을 수 있습니까? – typeoneerror

+0

니스, 예! 나는 이것이 어딘가에 있다고 생각한다. $ parts = array ("c"=> array ("tableName"=> "categories"))); echo key ($ parts); 별칭을 알려줍니다. 그런 다음 부품을 통해 루프를 돌리고 키를 잡고 사용하십시오. 당신의 도움을 주셔서 감사합니다! – typeoneerror