2011-10-17 2 views
4

Zend_Db에서 Row 객체를 직접 인스턴스화하는 대신 createRow 메서드를 사용하여 빈 빈 Row 객체를 새로 작성해야하는 이유가 궁금합니다.Zend_Db_Table_Row : 왜 createRow()를 사용해야합니까?

예를 들어 사용자 테이블과 행 클래스를 만들기 위해 기본 클래스를 확장 한 경우 새 행 객체를 만들려면 항상 다음을 수행하여 새 Row 객체를 만들어야합니다.

$userRow = new App_Row_User(); 
$userRow->setName('bob'); 
$userRow->save(); 

은 내가 항상 Zend_Db_Table_Row_Abstract 확장 내 행 클래스로이 기능을 구축 할 수 있음을 이해하지만이 있는지 궁금하네요 :

$userTable = new App_Table_User(); 
$userRow = $userTable->createRow(); 
$userRow->setName('bob'); 
$userRow->save(); 

하지만 나에게 그것을 할 수있는 더 의미는 말한다 특정 이유는 젠드 Framewo rk 팀은 이것을 기본값으로 만 만들지 않았습니까?

답변

4

new으로 직접 행 클래스를 인스턴스화합니다.

그러나 Row 객체는 해당 데이터 행에 대해 어떤 열이 유효한지 알아야합니다.

행의 클래스 이름을 해당 테이블 클래스 이름에 매핑하는 마법은 없습니다. 따라서 Row는 자신이 속한 테이블을 알지 못합니다. 따라서 삽입 또는 업데이트 작업을 수행하기 위해 SQL을 작성하는 방법을 추측 할 수 없습니다. 해당 Zend_Db_Table 객체에서이 메타 데이터를 가져옵니다. Row에 사용할 테이블을 지정해야합니다.

new으로 행 객체를 구성하는 경우 테이블 클래스 이름 또는 해당 테이블 클래스의 객체 인스턴스를 포함하여 구성 배열을 생성자에 전달해야합니다.

$userRow = new App_Row_User(array('table' => 'App_Table_User')); 

또는 유효한 테이블 개체 또는 클래스 이름없이

$userTable = new App_Table_User(); 
$userRow = new App_Row_User(array('table' => $userTable)); 

, 예외가 발생합니다 new와 행 객체를 인스턴스화.

마찬가지로 save()insert() 또는 update() 메서드를 호출하여 테이블 개체를 사용합니다. 유효한 테이블 개체가 없으면 Row의 save() 메서드는 예외를 throw합니다.