Khởi tạo Tablegateway

Nếu khi làm việc với một bảng dữ liệu, bạn có thể trực tiếp sử dung TableGateway để dễ dàng và nhanh chóng hơn. Để khởi tạo và sử dụng TableGateway bạn phải có đối tượng \Zend\Db\Adapter trước và chỉ ra tên bảng khi khởi tạo.

Ví dụ khởi tạo như sau:

$tablegateway= new TableGateway('tablename', $adapter);

Sử dụng Tablegateway

Sau khi khởi tạo thì rất dễ dàng sử dụng các phương thức mà Tablegateway cung cấp để thao tác với một bảng dữ liệu. Nó cung cấp các phương thức sau:

  • isInitialized();
  • initialize();
  • getTable();
  • getAdapter();
  • getColumns();
  • getFeatureSet();
  • getResultSetPrototype();
  • getSql();
  • select($where = null);
  • selectWith(Select $select);
  • insert($set);
  • insertWith(Insert $insert);
  • update($set, $where = null);
  • updateWith(Update $update);
  • delete($where);
  • deleteWith(Delete $delete);
  • getLastInsertValue();

Sử dụng Tablegateway

Dùng để lấy các dòng dữ liệu của bảng, tham số của select là $where làm mảng điểu kiện hoặc đối tượng \Zend\Db\Sql\Where

use Zend\Db\TableGateway\TableGateway;
$projectTable = new TableGateway('project', $adapter);
$where = array('type' => 'PHP'); //Hoặc $where =new \Zend\Db\Sql\Where(); $where->equalTo('type','PHP');
$rowset = $projectTable->select($where);

echo 'Projects of type PHP: ';
foreach ($rowset as $projectRow) {
     echo $projectRow['name'] . PHP_EOL;
}

Hoặc bạn chỉ lấy 1 dòng dữ liệu

$artistTable = new TableGateway('artist', $adapter);
$rowset = $artistTable->select(array('id' => 2));
$artistRow = $rowset->current();

Với cách khởi tạo như trên dữ liệu xuất ra là các mảng mô tả dòng dữ liệu. Để tập hợp dữ liệu là một đối tượng do bạn tự định nghĩa thì có thể thiết lập thêm $resultSetPrototype khi khởi tạo như sau:

$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new MyClass());
return new TableGateway('album', $dbAdapter, null, $resultSetPrototype);

Trong đó MyClass() là lớp bạn định nghĩa.Trong lớp đó phải có hàm exchangeArray:

     public function exchangeArray($data)
     {
         //$this->fieldata     = (!empty($data['id'])) ? $data['id'] : null;
      }

Các lệnh khác như delete, update, insert ... được sử dụng theo cách tương tự

Sử dụng Rowgateway

Rowgateway sử dụng để mô tả và thao tác đối với một dòng dữ liệu trong bảng.

Khởi tạo Rowgateway bạn cần chỉ ra Primarykey, Table của hàng, và Adapter để có thể cập nhật.

$rowgateway = new \Zend\Db\RowGateway\RowGateway($primaryKeyColumn, $table, $adapter);

Sau đó có thể nạp dữ liệu vào Rowgateway từ mảng dữ liệu dòng bằng các hàm populateexchangeArray.

Bạn truy cập, thiết lập các trường dữ liệu bằng toán tử -> ghi lại dữ liệu bằng hàm save và xóa dòng dữ liệu bằng hàm delete.

Ví dụ:

use Zend\Db\RowGateway\RowGateway;

$resultSet = $adapter->query('SELECT * FROM `user` WHERE `id` = ?', array(2));

$rowData = $resultSet->current()->getArrayCopy();

// row gateway
$rowGateway = new RowGateway('id', 'my_table', $adapter);
$rowGateway->populate($rowData, true);

$rowGateway->first_name = 'New Name';
$rowGateway->save();

$rowGateway->delete();

Lưu ý: Trong Tablegateway nếu khởi tạo bạn chỉ ra $features thích hợp nó sẽ tự động chuyển kết quả thành RowGateWay

use Zend\Db\TableGateway\Feature\RowGatewayFeature;
use Zend\Db\TableGateway\TableGateway;

$table = new TableGateway('artist', $adapter, new \Zend\Db\TableGateway\Feature\('id'));
$results = $table->select(array('id' => 2));

$artistRow = $results->current();
$artistRow->name = 'New Name';
$artistRow->save();