2011-11-30 2 views
4

rence 테이블을 참조하는 Zend_Db_Table을 사용하여 레코드를 삭제해야합니다. SQL에서 쿼리는 다음과 같이 보일 것이다 : 아래의 코드보다 더 우아 할 수있는 방법이JOIN을 사용하여 Zend_Db_Table에서 행 삭제

DELETE t1 FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL; 

있습니까?

$table = new Application_Model_DbTable_T1(); 
$sql = 'DELETE t1 FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL;'; 
$table->getAdapter()->query($sql); 

은 내가 similar topic을 발견하고 내가 $table->getAdapter()->query($sql);를 사용해야하지만 더 나은 희망을 것 같습니다.

답변

1

아니요, 귀하가이를 비난하는 방식이 올바른 방법입니다.

Application_Model_DbTable_T1Zend_Db_Table_Abstract 또는 그 하위 클래스로 확장한다고 가정합니다. Zend_Db_Table_Abstract은 하나의 테이블에서만 작동한다는 것을 의미합니다. 그리고이 쿼리에서 둘 이상의 테이블에 액세스하려고합니다.

이렇게하는 방법은 당신이하는 것과 같은 방법입니다. 테이블에 의존하지 않는 어댑터를 검색하십시오. 따라서 어댑터는 한 번에 둘 이상의 테이블과 상호 작용할 수 있습니다.

TL; DR : 올바른 방법입니다.