Я думаю, что приведу простой пример того, как работает Zend_Db, тогда вы сможете продемонстрировать, что вы намереваетесь. Я не уверен, что полностью понимаю.
Модель
// /application/Models/DbTable/MyTable.php
<?php
class Application_Model_DbTable_MyTable extends Zend_Db_Table_Abstract {
//actual name of database table
protected $_name = 'My_Table';
//name of primary key
protected $_primary = 'id';
}
И контроллер
// /application/controllers/MyController.php
<?php
class Mycontroller extends Zend_Controller_Action {
public function init() {
}
public function indexAction() {
//instantiate DbTable Model and execute FetchAll returns Rowset object
//call ->toArray() for array to be returned: $model->fetchAll()->toArray();
$model = new Application_Model_DbTable_MyTable();
$model->fetchAll();
}
только с этой простой моделью все ваши функции CRUD уже доступны для ваших моделей и контроллеров.
Мы создаем новые методы или переопределяем существующие методы, чтобы обеспечить больший контроль над нашей бизнес-логикой.
Большинству из нас нужны более простые функции CRUD.
Например, у меня есть функция удаления, которая требует проверки для других данных, чтобы быть успешной:
// /application/Models/DbTable/Track.php
public function deleteTrack($trackId) {
$trackRowset = $this->find($trackId);
$trackToGo = $trackRowset->current();
$usedBy = $trackToGo->findDependentRowset('Application_Model_DbTable_Member');
if (count($usedBy) == 0) {
$where = $this->getAdapter()->quoteInto('trackid = ?', $trackId);
$this->delete($where);
} else {
throw new Zend_Exception('Track is still assigned to member(s) and cannot be deleted.'
. "<br />" . 'Members: ' . count($usedBy));
}
}
Надеюсь, это добавляет ясности нашему обсуждению.