2010-12-14 3 views
0


많은 필드 접두어 (모든 테이블의 두 번째 첫 글자)가 많은 데이터베이스를 다루는 중이므로 사용자 테이블을 사용할 수 없습니다. "name"속성 ($ user-> name)을 사용할 수 있지만 $ user-> us_name을 사용할 수 있습니다.젠드 프레임 워크 -> users.us_name과 같은 데이터베이스 테이블 필드 접두어


나는 거기에 간단한 방법과 테이블의 모든 필드에 대한 자동 접두사 접두사를 설정하는 방법있어?

답변

1

이렇게하려면 Zend_Db_Table_Row을 확장해야합니다. 다행히 ZF는이 목적으로 명시 적으로 _transformColumn() 메소드를 포함합니다. 하지만 나 자신보다 앞서 가고있다. 먼저, 테이블 클래스를 설정하십시오.

가 가
class MyTable extends Zend_Db_Table_Abstract { 
    protected $_name = 'foo_mytable'; 
    protected $_rowClass = 'My_Db_Table_Row'; 
} 

다음, 사용자 정의 행 클래스 생성 : : 이제

class My_Db_Table_Row extends Zend_Db_Table_Row { 
    protected function _transformColumn($columnName) { 
     $columnName = parent::_transformColumn($columnName); 
     $prefix = 'us_'; 
     return $prefix . $columnName; 
    } 
} 

, 당신은 단순이 뭔가를 (할 수 있습니다,이 예제 MVC를 무시 이것은 데이터베이스가 "foo_mytable"라는 테이블이 있습니다 가정 디자인 이념) :

$table = new MyTable(); 
$records = $table->fetchAll(); 
foreach ($records as $record) { 
    echo $record->name; 
} 

테이블에 "us_name"이라는 열이 있다고 가정하면이 방법이 효과적입니다. 나는 그것을 직접 테스트했다. 사용자 정의 테이블 행에서 구성 파일에서 테이블 접두어를 가져올 수 있습니다. 레지스트리에 저장되어 있다면 $prefix = 'us_';$prefix = Zend_Registry::get('tablePrefix');으로 바꿀 수 있습니다.

0

_transformColumn()에 대해 알지 못했습니다. @curtisdf의 예를 들어 보겠습니다.
난 당신이 (을 테스트하지)이 함께 오버라이드 (override) 할 필요가 생각 :

protected function _transformColumn($columnName) 
{ 
    $tblName = $this->_table->info(Zend_Db_Table::NAME); 
    $prefix = substr($tblName, 0, 2); 

    return $prefix . '_' . parent::_transformColumn($columnName); 
} 

이를 사용하여, 당신은 그들이 dinamically 검색 한, 접두사/테이블 이름을 저장하지 않아도됩니다.