>php教程 >PHP开发 >Zend Framework 튜토리얼의 Zend_Db_Table 사용법에 대한 자세한 설명

Zend Framework 튜토리얼의 Zend_Db_Table 사용법에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-01-05 09:54:391413검색

이 문서의 예에서는 Zend_Db_Table의 사용법을 설명합니다. 참고용으로 다음과 같이 공유하세요.

1. 소개

Zend_Db_Table은 Zend Framework의 테이블 모듈입니다. zend_db_adapter를 통해 데이터베이스에 연결하고 데이터베이스의 테이블 개체를 확인합니다.

2.

을 시작하려면 먼저 추상 클래스 zend_db_table을 만들어야 합니다(참고: 이 클래스는 추상 클래스이므로 사용할 수 없습니다). 직접 인스턴스화하면 이 클래스를 먼저 상속한 다음 하위 클래스를 인스턴스화하여 다른 유형의 데이터베이스 어댑터를 지정하지 않는 한 모든 zend_db_table 클래스 인스턴스는 기본 어댑터를 사용합니다.

<?php
// 建立一个 adapter
require_once &#39;Zend/Db.php&#39;;
$params = array (
  &#39;host&#39;   => &#39;127.0.0.1&#39;,
  &#39;username&#39; => &#39;malory&#39;,
  &#39;password&#39; => &#39;******&#39;,
  &#39;dbname&#39;  => &#39;camelot&#39;
);
$db = Zend_Db::factory(&#39;PDO_MYSQL&#39;, $params);
// 为所有的Zend_Db_Table对象设定默认的adapter
require_once &#39;Zend/Db/Table.php&#39;;
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
{
  // 默认表名为 &#39;class_name&#39;
  // 但是我们也可以对应其它表
  protected $_name = &#39;another_table_name&#39;;
}
?>

zend_db_table 클래스의 기본 필드 "id"는 테이블의 기본 키입니다(이 필드를 자동으로 증가시키는 것이 가장 좋습니다). , 그러나 필수는 아닙니다) 테이블의 기본 키가 "$id"로 명명되는 대신 테이블 엔터티 클래스를 정의할 때 $_primary를 재구성할 수 있습니다

<?php
class ClassName extends Zend_Db_Table
{
  // 默认主键为&#39;id&#39;
  // 但我们也可以设定其他列名为主键
  protected $_primary = &#39;another_column_name&#39;;
}
?>

설정할 수도 있습니다. 이러한 변수는 테이블 엔터티 클래스의 _setup() 메서드를 통해 수행되지만 수정 후에는 반드시 parent::_setup() 메서드를 다시 실행해야 합니다.

<?php
class ClassName extends Zend_Db_Table
{
  protected function _setup()
  {
    $this->_name = &#39;another_table_name&#39;;
    $this->_primary = &#39;another_column_name&#39;;
    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(
  &#39;noble_title&#39; => &#39;King&#39;,
  &#39;first_name&#39; => &#39;Arthur&#39;,
  &#39;favorite_color&#39; => &#39;blue&#39;,
)
$id = $table->insert($data);
?>
5. data

테이블의 데이터 행을 수정하려면 열 이름 설정: 데이터의 연관 배열을 매개변수로 설정하고 update() 메서드를 호출하고 변경해야 할 행을 결정합니다. where 조건절을 통해 이 메소드는 테이블의 데이터를 수정하고 수정된 행 수를 반환합니다.

(Zend 프레임워드)는 수정된 데이터를 자동으로 인용하지만 이 검사에는 조건절이 포함되지 않습니다. 작업을 완료하려면 테이블의 zend_db_adapter 개체를 사용해야 합니다.

class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();
$db = $table->getAdapter();
$set = array(
  &#39;favorite_color&#39; => &#39;yellow&#39;,
)
$where = $db->quoteInto(&#39;first_name = ?&#39;, &#39;Robin&#39;);
$rows_affected = $table->update($set, $where);
6. 행 삭제


테이블의 데이터를 삭제하려면 delete( ) 메소드를 사용하고 where 조건절을 통해 삭제해야 하는 행을 판별합니다. 이 메소드는 삭제된 행 수를 리턴합니다.

(zend Framework)는 조건절을 인용하지 않으므로 이를 사용해야 합니다. 작업을 완료하기 위해 테이블의 zend_db_adapter 객체

<?php
//
// DELETE FROM round_table
//   WHERE first_name = "Patsy"
//
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();
$db = $table->getAdapter();
$where = $db->quoteInto(&#39;first_name = ?&#39;, &#39;Patsy&#39;);
$rows_affected = $table->delete($where);
?>
7. 기본 키 검색 데이터에 따라

find() 메소드를 호출하면 테이블의 데이터를 쉽게 검색할 수 있습니다. 특정 데이터만 쿼리하려는 경우 이 메소드는 zend_db_table_row 객체를 반환하고, 여러 레코드를 쿼리하려는 경우 zend_db_table_rowset 객체를 반환합니다.

<?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));
?>
8. 레코드 검색

기본 키를 통해 해당 데이터 행을 찾는 것이 매우 편리하지만, 기본 키가 아닌 다른 조건을 통해 데이터 행을 찾는 경우가 많습니다. () 메서드를 사용하여 where 조건문(및 선택적 order 문)을 사용할 수 있습니다. fetchRow() 메서드를 호출하면 zend_db_tabel은 조건을 충족하는 첫 번째 데이터 행의 zend_db_table_row 객체를 반환합니다. >

(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(&#39;noble_title = ?&#39;, &#39;Sir&#39;)
    . $db->quoteInto(&#39;AND first_name = ?&#39;, &#39;Robin&#39;);
$order = &#39;favorite_color&#39;;
$row = $table->fetchRow($where, $order);
?>

필요한 경우 한 번에 여러 레코드를 검색하려면 fetchRow() 메소드와 유사하게 fetchAll() 메소드를 사용할 수 있습니다. 이 메소드는 where 및 order 절을 설정할 수 있을 뿐만 아니라 한계 개수 및 한계 오프셋 값도 설정할 수 있습니다. 반환되는 결과의 수를 제한하세요. 이 메서드를 실행하면 선택한 결과가 Zend_Db_Table_Rowset 개체로 반환됩니다.

참고(zend 프레임워크)에서는 where 문을 인용하지 않으므로 zend_db_adapter를 통해 데이터 처리를 수행해야 합니다.


10. 도메인 로직
<?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(&#39;noble_title = ?&#39;, &#39;Sir&#39;);
$order = &#39;first_name&#39;;
$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[&#39;created_on&#39;])) {
      $data[&#39;created_on&#39;] = time();
    }
    return parent::insert($data);
  }
  public function update($data)
  {
    // 添加一个时间戳
    if (empty($data[&#39;updated_on&#39;])) {
      $data[&#39;updated_on&#39;] = time();
    }
    return parent::update($data);
  }
}
?>

이 기사가 Zend Framework 프레임워크 기반의 PHP 프로그램을 사용하는 모든 사람에게 도움이 되기를 바랍니다.
<?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 중국어 웹사이트를 참고하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.