이 문서의 예에서는 Zend_Db_Table의 사용법을 설명합니다. 참고용으로 다음과 같이 공유하세요.
1. 소개
Zend_Db_Table은 Zend Framework의 테이블 모듈입니다. zend_db_adapter를 통해 데이터베이스에 연결하고 데이터베이스의 테이블 개체를 확인합니다.
2.
을 시작하려면 먼저 추상 클래스 zend_db_table을 만들어야 합니다(참고: 이 클래스는 추상 클래스이므로 사용할 수 없습니다). 직접 인스턴스화하면 이 클래스를 먼저 상속한 다음 하위 클래스를 인스턴스화하여 다른 유형의 데이터베이스 어댑터를 지정하지 않는 한 모든 zend_db_table 클래스 인스턴스는 기본 어댑터를 사용합니다.
<?php // 建立一个 adapter require_once 'Zend/Db.php'; $params = array ( 'host' => '127.0.0.1', 'username' => 'malory', 'password' => '******', 'dbname' => 'camelot' ); $db = Zend_Db::factory('PDO_MYSQL', $params); // 为所有的Zend_Db_Table对象设定默认的adapter require_once 'Zend/Db/Table.php'; Zend_Db_Table::setDefaultAdapter($db); ?>
다음으로, 데이터베이스에 "round_table"이라는 테이블이 있다고 가정합니다. 이 테이블에 zend_db_table을 사용하려면 zend_db_table 클래스를 상속하고 RoundTable이라는 새 클래스를 생성하면 됩니다. 그런 다음 round_table의 데이터 행을 확인하고 조작할 수 있습니다. 이 클래스를 통해 데이터베이스의 테이블을 가져오고 데이터 결과를 가져옵니다.
<?php class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); ?>
3. 테이블 이름 및 기본 키
기본적으로 zend_db_table 클래스는 클래스 이름을 테이블 이름으로 처리합니다. 예를 들어, SomeTableName이라는 zend_db_table 클래스는 데이터베이스의 테이블 이름과 일치하지 않도록 하려면 데이터베이스의 "some_table_name"에 해당합니다. 이 밑줄 친 형식을 사용하면 $_name을 재구성할 때 클래스를 정의할 수 있습니다.
<?php class ClassName extends Zend_Db_Table { // 默认表名为 'class_name' // 但是我们也可以对应其它表 protected $_name = 'another_table_name'; } ?>
zend_db_table 클래스의 기본 필드 "id"는 테이블의 기본 키입니다(이 필드를 자동으로 증가시키는 것이 가장 좋습니다). , 그러나 필수는 아닙니다) 테이블의 기본 키가 "$id"로 명명되는 대신 테이블 엔터티 클래스를 정의할 때 $_primary를 재구성할 수 있습니다
<?php class ClassName extends Zend_Db_Table { // 默认主键为'id' // 但我们也可以设定其他列名为主键 protected $_primary = 'another_column_name'; } ?>
설정할 수도 있습니다. 이러한 변수는 테이블 엔터티 클래스의 _setup() 메서드를 통해 수행되지만 수정 후에는 반드시 parent::_setup() 메서드를 다시 실행해야 합니다.
<?php class ClassName extends Zend_Db_Table { protected function _setup() { $this->_name = 'another_table_name'; $this->_primary = 'another_column_name'; parent::_setup(); } } ?>
4.
테이블에 새 데이터 행을 삽입하려면 열 이름을 변경하기만 하면 됩니다. 데이터의 연관 배열을 매개변수로 사용하여 insert() 메소드를 호출하기만 하면 됩니다. (zend 프레임워크)는 자동으로 인용됩니다. 데이터를 삭제하고 삽입된 마지막 행의 id 값을 반환합니다(참고: 여기에서는 zend_db_adapter::insert 메서드와 다르며 후자는 삽입된 행 수를 반환합니다).
<?php // // INSERT INTO round_table // (noble_title, first_name, favorite_color) // VALUES ("King", "Arthur", "blue") // class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $data = array( 'noble_title' => 'King', 'first_name' => 'Arthur', 'favorite_color' => 'blue', ) $id = $table->insert($data); ?>
class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $db = $table->getAdapter(); $set = array( 'favorite_color' => 'yellow', ) $where = $db->quoteInto('first_name = ?', 'Robin'); $rows_affected = $table->update($set, $where);
<?php // // DELETE FROM round_table // WHERE first_name = "Patsy" // class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $db = $table->getAdapter(); $where = $db->quoteInto('first_name = ?', 'Patsy'); $rows_affected = $table->delete($where); ?>
<?php class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); // SELECT * FROM round_table WHERE id = "1" $row = $table->find(1); // SELECT * FROM round_table WHERE id IN("1", "2", 3") $rowset = $table->find(array(1, 2, 3)); ?>
(zend 프레임워크)는 where 문을 인용하지 않으므로 데이터 처리를 수행하는 zend_db_adapter를 전달해야 합니다
9. 여러 레코드 검색<?php // // SELECT * FROM round_table // WHERE noble_title = "Sir" // AND first_name = "Robin" // ORDER BY favorite_color // class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $db = $table->getAdapter(); $where = $db->quoteInto('noble_title = ?', 'Sir') . $db->quoteInto('AND first_name = ?', 'Robin'); $order = 'favorite_color'; $row = $table->fetchRow($where, $order); ?>
필요한 경우 한 번에 여러 레코드를 검색하려면 fetchRow() 메소드와 유사하게 fetchAll() 메소드를 사용할 수 있습니다. 이 메소드는 where 및 order 절을 설정할 수 있을 뿐만 아니라 한계 개수 및 한계 오프셋 값도 설정할 수 있습니다. 반환되는 결과의 수를 제한하세요. 이 메서드를 실행하면 선택한 결과가 Zend_Db_Table_Rowset 개체로 반환됩니다.
참고(zend 프레임워크)에서는 where 문을 인용하지 않으므로 zend_db_adapter를 통해 데이터 처리를 수행해야 합니다.<?php class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $db = $table->getAdapter(); // SELECT * FROM round_table // WHERE noble_title = "Sir" // ORDER BY first_name // LIMIT 10 OFFSET 20 $where = $db->quoteInto('noble_title = ?', 'Sir'); $order = 'first_name'; $count = 10; $offset = 20; $rowset = $table->fetchAll($where, $order, $count, $offset); ?>
을 Zend Framework 테이블 모듈로 추가하면 Zend_Db_Table은 자체적으로 고유한 도메인 로직으로 캡슐화됩니다. 데이터 변경 사항이 제출되기 전에 작업 및 확인을 구현합니다.
마찬가지로 기본 키 외에 다른 필드를 통해 데이터를 쿼리하도록 자신만의 find() 메서드를 설정할 수도 있습니다.
<?php class RoundTable extends Zend_Db_Table { public function insert($data) { // 添加一个时间戳 if (empty($data['created_on'])) { $data['created_on'] = time(); } return parent::insert($data); } public function update($data) { // 添加一个时间戳 if (empty($data['updated_on'])) { $data['updated_on'] = time(); } return parent::update($data); } } ?>
<?php class RoundTable extends Zend_Db_Table { public function findAllWithName($name) { $db = $this->getAdapter(); $where = $db->quoteInto("name = ?", $name); $order = "first_name"; return $this->fetchAll($where, $order); } } ?>
더 많은 Zend Framework 튜토리얼과 Zend_Db_Table 사용법에 대한 자세한 설명을 보려면 PHP 중국어 웹사이트를 참고하세요!