Phalcon\Mvc\Model's afterFetch

скажем, у меня есть:

class Book extends Model
{
    private $someVar = 1;

    public function afterFetch()
    {
        if ($this->var == 2) $this->doSomething();
    }

    public function setVar($val)
    {
        $this->someVar = $val;
    }

    public function doSomething(){}
}

$book = Book::find($someId);

Вопрос: как я могу в приведенном выше сценарии сделать так, чтобы $this->someVar равнялась 2 в afterFetch()?

Спасибо!


person temuri    schedule 16.11.2013    source источник


Ответы (2)


Если find является статическим методом, то у вас не так много возможностей изменить эту переменную за пределами вашей области, единственный способ, который я вижу, это:

class Book extends Model
{
    private static $someVar = 1;

    public function afterFetch()
    {
        if (self::$someVar == 2) $this->doSomething();
    }

    public static function setVar($val)
    {
        self::$someVar = $val;
    }

    public function doSomething(){}
}

Book::setVar(2);
$book = Book::find($someId);

Но опять же, я никогда не использовал эту структуру, поэтому могут быть способы обойти это.

person Twisted1919    schedule 16.11.2013

Единственный раз, когда я вижу триггер метода afterfetch, это когда я делаю findfirst

единственный обходной путь, который я нашел, - это создать новую функцию в модели, которая будет перебирать данные. и запустите свои функции.

я надеялся, что find действительно запустит этот код после того, как я использовал запрос раньше, но, увы, я ошибался.

Я хотел бы найти лучшее решение, но лучшее, что я могу найти, это создать новый метод, который действует как послевыборка и вызывается вручную.

person Zanson    schedule 27.11.2013