2011-09-17 4 views
0

CMS 종류의 사이트를 만들고 있습니다. 많은 관리 사용자가 있습니다. ACL이 비즈니스 계층 용으로 설치되었습니다. 하지만 이제 관리자 사용자가 속한 도시 기반 모델에 사용자 지정 ACL 논리를 적용하려고합니다.zend db select

예 : 관리자는 New York 출신입니다. 그는 뉴욕시와 관련된 콘텐츠를 볼 수 있습니다.

저는 모델에서 Zend_Db_Select를 사용하여 많은 쿼리를 작성했습니다. 이제 어디에서나 쿼리를 변경했습니다. 논리가 추가 될 수있는 방법이 있습니까? ('u.city_id =?', $ admin_user_city_id) 각각의 쿼리에 대해.

미리 감사드립니다.

덕분에 Venu

답변

2

난 당신이 Zend_Db_Table_Select을 확장 할 필요하지 않을 수도 있다고 생각합니다. Zend_Db_Table_AbstractMy_Db_Table_Abstract으로 만 확장하면 모든 모델이 확장된다는 것을 원하는대로 할 수 있습니다. 이 추상 클래스에서 Zend_Db_Table_Select을 반환하는 기본값 select()을 확장하고 반환하기 전에 where 절을 추가하기 만하면됩니다.

따라서 $myModel -> select()으로 선택을 호출 할 때마다 이미 where 절이 포함되어있을 것입니다. 또한 올바른 어딘가에 당신이에있어 모델에 따라 당신의 u 테이블에 조인 만든 것을 의미 물론

abstract class My_Db_Table_Abstract extends Zend_Db_Table_Abstract 
{ 
    public function select($withFromPart = self::SELECT_WITHOUT_FROM_PART) 
    { 
     $select = parent::select($withFromPart); 
     # Retreive $admin_user_city_id 
     $select -> where('u.city_id = ?', $admin_user_city_id); 
     return $select; 
    } 
} 

.

+0

DB 어댑터에서 select 개체를 호출하려면 어떻게해야합니까? 나는 그것이 그것을 위해 작동하지 않을 것이라고 생각합니다. 그래서 저는 Zend_Db_Select를 확장하고 싶습니다. – Venu

+0

저에게 DB 어댑터는 실제로 비즈니스 코드를위한 장소가 아닙니다. 어쨌든 당신이 가고 싶다면, 지금 사용하고있는 어댑터에 따라'Zend_Db_Adapter_Abstract' 또는'Zend_Db_Adapter_Mysqli'를 확장 한 자신 만의 어댑터를 만들 수 있습니다. 그렇다면 당신은'select()'메소드를 확장하여 답을 설명했다. – jhuet

+0

'Zend_Db_Select'를 확장하면'Zend_Db_Table_Select'가 확장되어 그 클래스에서 수정하지 않으므로 약간의 작업이 될 것입니다. 그래서 접근 자 수정을 선호합니다. – jhuet

관련 문제