2014-10-15 7 views
0

/가입 젠드에서 필드 이름 바꾸기를 선택합니다 state.name의 이름이 으로 바뀌 었습니다.
지금까지 내가 가지고이 : 내가 2 개 테이블을 쿼리

SELECT `r`.*, `r`.`name` AS `statename` FROM `region` AS `r` 
INNER JOIN `state` AS `s` ON r.state_id = s.state_id 

그래서 난 그냥 r.name AS statename- s.name AS statename을 변경해야 다음 쿼리 결과

$select = $select->from(array('r' => 'region'))->join(array('s' => 'state'), 
'r.state_id = s.state_id',array("statename" =>"r.name")); 

.
하지만 나는 작동하지 않습니다. 내가 array("statename" =>"s.name")에 선택의 마지막 부분을 변경하는 경우, 내가 합류 테이블의 필드 이름을 바꿀 수있는 방법을 오류 그래서

Select query cannot join with another table

를 얻을?

답변

1

무결성 검사를 제거해야합니다.

$table = new self(); 
    $select = $table->select()->setIntegrityCheck(false); 
    $select = $select->from(array('r' => 'region'))->join(array('s' => 'state'),'r.state_id = s.state_id',array("statename" =>"s.name")); 

무결성 검사는 쿼리가 너무 Zend_Db_Table_Row 객체가 업데이트 저장하거나 삭제할 수 있습니다, 다른 테이블에서 열을 사용하지 않을되어 있는지 확인 할 수있다. 무결성을 제거하면 Zend에게 자신이하는 일을 알고 있고 다른 테이블의 열을 사용하려고한다고 말합니다.

다음 문서에서 간략한 설명입니다 :

Zend_Db_Table_Select 주로 제한하고 법적 SELECT 쿼리에 대한 기준을 적용 할 수 있도록 유효성을 검증하는 데 사용됩니다. 그러나 Zend_Db_Table_Row 구성 요소의 유연성이 필요하고 쓰기 가능 또는 삭제 가능 행이 필요하지 않은 경우가 있습니다. 이 특정 사용자의 경우 setIntegrityCheck()에 FALSE 값을 전달하여 행 또는 행 집합을 검색 할 수 있습니다. 결과적으로 행 또는 행 집합은 '잠긴'행 (save(), delete() 및 모든 필드 설정 메서드가 예외를 throw 함)을 반환합니다.