class Application_Model_DbTable_Kontynent_Row extends Zend_Db_Table_Row { public function __toString() { return (string)$this->nazwa; } function getPanstwa() { $Panstwo = new Application_Model_DbTable_Panstwo(); $select = $Panstwo->select()->order('nazwa'); return $this->findDependentRowset('Application_Model_DbTable_Panstwo', null, $select); } protected function _insert() { if ($this->slug === null) { $this->setSlug(My_Slugs::string2slug($this->nazwa)); } } protected function _update() { if ($this->slug === null) { $this->setSlug(My_Slugs::string2slug($this->nazwa)); } } public function setSlug($slug) { if (trim($slug) == '') { $slug = 'nieznany'; } $next_slug = $slug; $q = 'select count(kontynent_id) from kontynent where slug = ?'; $db = $this->_getTable()->getAdapter(); $ile = $db->fetchOne($q, $next_slug); $unikatowy = ($ile == 0); $min = 2; $max = 100; while (!$unikatowy) { $next_slug = $slug . $min; $min++; if ($min > $max + 1) { throw new Exception("setSlug({$next_slug})"); }; $q = 'select count(kontynent_id) from kontynent where slug = ?'; $db = $this->_getTable()->getAdapter(); $ile = $db->fetchOne($q, $next_slug); $unikatowy = ($ile == 0); } $this->slug = $next_slug; } }
Listing 22.1. Zmodyfikowana klasa reprezentująca pojedynczy rekord z tabeli kontynent
Rozdział 22. Widoki częściowe