przewiń do treści

Zend Framework od podstaw

Włodzimierz Gajda

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

listing-22-01.txt