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