Кэширование отношений ORM - PullRequest
       5

Кэширование отношений ORM

0 голосов
/ 17 февраля 2011

Без неиспользованных слов, мне нужен совет.

Я создаю другое приложение на основе платформы KohanaPHP 3.0.9, влюблённое в ORM (реальное повышение производительности!).

Я получил модель Model_User:

class Model_User extends ORM
{
    protected $_table_name = 'users';
    protected $_primary_key = 'id';

    protected $_has_many = array(
        'articles' => array(
            'through' => 'users_articles',
        ),
    );

    protected $_ignored_columns = array('articles');
}

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

Что такое $_ignored_columns?В некоторых местах мне нужно вернуть объект $user, поэтому я возвращаю его со статьями (при необходимости) в виде метода $ user: $user->articles->find_all();

Пока все хорошо, все работает действительно отлично.Я не совсем уверен, что мой подход с $_ignored_columns правильный, если нет, пожалуйста, дайте мне знать с советом, как его решить.

Однако я столкнулся с проблемой с кэшированием.В общем, все работает правильно, ожидайте статьи.Это просто игнорируется кэшем (не сохраняется в файле кэша).Я также пытался кэшировать его отдельно - все еще без удачи.

Есть предложения?

1 Ответ

1 голос
/ 18 февраля 2011

Игнорируемые столбцы - это просто некоторые «воображаемые» поля, которые вы можете иметь в модели, которые ORM не будет пытаться сохранить в save () (например, поле password_confirm в Model_Auth_User)

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

ORM по умолчанию не поддерживает кэширование (кроме столбцов таблицы).

...