Спасибо за замечания. Инициализацию кэша действительно можно вынести, в моем классе показана идея для понимания что именно мы делаем и про какие вещи не стоит забывать. По поводу версии php 5.3 я внес правки в статью.
__construct нужен для инициализации параметров класса модели, которая наследуется от абстрактного. А __call и __callStatic нужны для вызова динамических и статических методов. Всё описание в статье.
Когда стояла эта задача я в первую очередь зашел на хабр и ничего подобного не нашел. И и пусть пишут про перепечатывание документации, но эти плоды результат моего дебага библиотеки ZF, это лучший способ заглянуть и узнать как это работает.
Боже упаси меня использовать подсчёт COUNT по depended rows. Если вы переживаете на этот счёт, то я этого не делаю. Мой вариант с join отличается от вашего, только лишь тем, что я не расширяю Zend_Db_Table_Row_Abstract, а выполняю select с join'ами в самой моделе. Тем не менее спасибо за пример.
Я использую fetchAll для тех целей, чтобы получить Zend_Db_Table_Rowset потом из ровсета получаю отдельные Zend_Db_Table_Row и только эти row могут работать с каскадными удалениями и обновлениями, также они могут находить Parent и Dependent rows.
У меня готова ещё одна статья про кэширование моделей, опубликовать её из-за минусовой кармы не имею возможности. Данная статья на данный момент имеет плюсовой рейтинг. Кому не безразлична судьба раздела Zend Framework на хабре и моя в частности, прошу плюсануть.
class Default_Models_Games
{
public function getGames()
{
$gamesModel = new Default_Models_Games_Table;
return $gamesModel->fetchAll();
}
}
это долго?..
возможно пример не самый подходящий, но это просто
В zf предоставлено достойное и грамотно спроектированное решение связки таблиц. И вполне удобное в применении. И было бы интересно узнать, что вы подразумеваете под выражением «чистый PDO»?
Ман по zf одним чтением не заканчивается. Только перечитывание и рабочий кусок кода может дать понимание происходящего. Только после этого можно взглянуть в документацию и сказать: «Да чё там, всё же и так понятно!»
{
protected $_name = 'games';
protected $_primary = array('game_id');
}
class Default_Models_Games
{
public function getGames()
{
$gamesModel = new Default_Models_Games_Table;
return $gamesModel->fetchAll();
}
}
это долго?..
возможно пример не самый подходящий, но это просто