많은 필드 접두어 (모든 테이블의 두 번째 첫 글자)가 많은 데이터베이스를 다루는 중이므로 사용자 테이블을 사용할 수 없습니다. "name"속성 ($ user-> name)을 사용할 수 있지만 $ user-> us_name을 사용할 수 있습니다.젠드 프레임 워크 -> users.us_name과 같은 데이터베이스 테이블 필드 접두어
나는 거기에 간단한 방법과 테이블의 모든 필드에 대한 자동 접두사 접두사를 설정하는 방법있어?
많은 필드 접두어 (모든 테이블의 두 번째 첫 글자)가 많은 데이터베이스를 다루는 중이므로 사용자 테이블을 사용할 수 없습니다. "name"속성 ($ user-> name)을 사용할 수 있지만 $ user-> us_name을 사용할 수 있습니다.젠드 프레임 워크 -> users.us_name과 같은 데이터베이스 테이블 필드 접두어
나는 거기에 간단한 방법과 테이블의 모든 필드에 대한 자동 접두사 접두사를 설정하는 방법있어?
이렇게하려면 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');
으로 바꿀 수 있습니다.
_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 검색 한, 접두사/테이블 이름을 저장하지 않아도됩니다.