Kohana 3 ORM: конструктор "после загрузки" - PullRequest
3 голосов
/ 02 сентября 2010

Есть ли в ORM Kohana 3 какой-либо способ запустить кусок кода в модели, но только после того, как эта модель была загружена из базы данных? Простым примером является обязательное отношение has_one.

   ORM::factory('user')->where('name', '=', 'Bob')->find();

А что, если у всех пользователей должно быть какое-то другое свойство, поэтому, если Боба не существует, его нужно будет создать? Прямо сейчас, в месте, где работает эта строка, я проверяю нулевой первичный ключ и даю указание модели добавить это отношение, если так. Но есть ли способ сделать это моделью? Проблема с конструктором заключается в том, что модели можно создавать пустыми непосредственно перед заполнением из БД, как видно в этом примере, поэтому я не хочу этого.

Ответы [ 2 ]

3 голосов
/ 03 сентября 2010

Просто создайте метод модели со всей необходимой логикой:

public function get_user($username)
{
    $this->where('name', '=', $username)->find();
    if ( ! $this->_loaded)
    {
        // user not found
    }
    else
    {
        // user exists, do something else
    }
    // make it chainable to use something like this:
    //   echo ORM::factory('user')->get_user('Bob')->username;
    return $this;
}
3 голосов
/ 02 сентября 2010

Попробуйте перегрузить метод find() в вашей модели:

class Model_User extends ORM {

    public function find($id = NULL) {
        $result = parent::find($id);
        if (!$result->loaded()) {
            // not found so do something
        }
        return $result;
    }

}
...