class Model (Модели)

Модели в системе могут быть описаны только для существующих объектов ORM и имеют такое же имя.

Модели могут быть двух видов:

  • виртуальная модель — для каждого объекта ORM есть виртуальная модель, содержащая стандартный набор методов (модель не существует в виде файла);
  • расширенная — модель, объявленная в виде класса, расширяющего функционал стандартной модели; в отличие от виртуальной может быть инстанцирована при помощи метода getInstance (класс должен быть отнаследован от класса Model).

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

Создается модель конструкцией:

Model::factory($objectName);

Для расширенных моделей (реальных) так же возможна конструкция вида:

Model_Page::getInstance();

Основные методы:

class Model {

/**
* Хранилище объектов  Db_object
* @var Db_Object_Store
*/
protected $_store;
	
/**
* Адаптер подключения к базе данных
* @var Zend_Db_Adapter_Abstract
*/
protected $_db;
	
/**
* Контейнер конфигурации обекта (Db_Object)
* @var Db_Object_Config
*/
protected $_objectConfig;
	
/**
* Имя объекта и модели (Db_Object)
* @var string
*/
protected $_name;	
	
/**
* Продолжительность (время в секундах) жесткого кэширования (без инвалидации)
* @var integer
*/
protected $_cacheTime;
	
/**
* Адаптер кэширования или false
* @var Current Cache_Interface
*/
protected $_cache;

/**
* Менеджер подключений к БД (с 0.9.1)
* @var Db_Manager_Interfacee
*/
protected $_dbManager;

/**
 * Установить префикс таблицы базы данных
 * @param string prefix
 */	 	 	 	
static public function setDbPrefix($prefix)
   	 	 	 	
/**
 * Получить префикс таблицы базы данных
 * @return string
 */
static public function getDbPrefix()
	 	 	 		 	 	 	
/**
 * Установить кэширующий интерфейс
 * @param Cache_Interface $cache or false
 */
static public function setDataCache($cache)
	 	 	 	
/**
 * Установить глобальный коннектор к базе данных (для всех моделей)
 * @param Zend_Db_Adapter_Abstract $db
 */
static public function setGlobalDbConnection(Zend_Db_Adapter_Abstract $db)
	 	 	 	
/**
 * Установить время жизни кэша при использовании жесткого кэширования (для всех моделей)
 * @property integer $time
 */
static public function setGlobalHardcacheTime($time)
	 	 	 		 	 	 	
/**
 * Заменить коннектор базы данных для модели
 * @param Zend_Db_Adapter_Abstract $db 
 */
public function setDbConnection(Zend_Db_Adapter_Abstract $db)
		 	 	 	
/**
 * Установить время жизни жесткого кэша модели
 * @param integer $time
 */
public function setHardCacheTitme($time)

/**
 * Получить коннектор базы данных для текущей модели
 * @return Zend_Db_Adapter_Abstract
 */
public function getDbConnection()

/**
 * Получить имя объекта, к которому относится модель
 * @return string
 */
public function getObjectName()

/**
 * Получить ключ для кэша
 * @param array $params — параметры не могут содержать массивы, объекты и ресурсы
 * @return string
 */
public function getCacheKey(array $params)

/**
 * Получить имя таблицы базы данных (с префиксом)
 * @return string
 */
public function table()

/**
 * Получить запись по идентификатору
 * @param integer $id
 * @param array $fields — optional — список полей для выборки
 * @return array / false
 */
public function getItem($id , $fields = '*')

/**
 * Получить несколько записей по списку идентификаторов
 * @param array $ids — список идентификаторов
 * @param array $fields — optional -  список полей для выборки
 * @return array / false
 */     	 	 	
final public function getItems(array $ids , $fields = '*')

/**
 * Получить данные объекта используя кэширование
 * @param integer $id - object identifier
 * @return array
 */
public function getCachedItem($id)
 	 	 	
/**
 * Получить данные объекта используя кэширование , поиск по уникальному полю
 * @param string field - field name
 * @param string value - field value
 * @return array
 */
public function getCachedItemByField($field , $value)
	 	 	 	
/**
 * Получить данные объекта, поиск по уникальному полю
 * @param string $fieldName
 * @param string $value
 * @param array $fields - optional
 * @return array
 */
public function getItemByUniqueField($fieldName , $value , $fields = '*')

/**
 * Добавить фильтры (where) к запросу
 * @param Zend_Db_Select $sql
 * @param array $filters  ключ — имя поля, значение
 * @return void
 */
public function queryAddFilters(Zend_Db_Select $sql , $filters)

/**
 * Добавить параметры пагинации к запросу
 * Используется в CRUD-контроллерах для пагинации и сортировки списков
 * @param Zend_Db_Select $sql
 * @param array $params — возможные ключи: start,limit,sort,dir
 * @return void
 */
static public function queryAddPagerParams(Zend_Db_Select $sql , $params)

/**
 * Перевести массив в список целочисленных значений для вставки в условия SQL-запроса,
 * используется для увеличения производительности подготовки запросов на основе Zend_Select
 * @param array $ids
 * @return string
 */
static public function listIntegers(array $ids)

/**
 * Получить количество объектов (строк в таблице)
 * @param array $filters — optional - фильтры (where) ключ — имя поля, значение
 * @param string $query - optional - search query — поисковый запрос
 * @param boolean $useCache — использовать жесткое кэширование
 * необходимо помнить, что жесткий кэш инвалидируется только по истечению времени жизни (configs/main.php),
 * используется в случае неприменимости триггеров изменений
 * @return integer
 */
public function getCount($filters = false , $query = false , $useCache = false)

/**
 * Получить список записей
 * @param array $params — optional параметры array('start'=>0,'limit'=>10,'sort'=>'fieldname','dir'=>'DESC')
 * @param array $filters - optional фильтры (where) ключ — имя поля, значение
 * @param array $fields - optional  список полей для выборки
 * @param boolean $useCache - использовать жесткое кэширование
 * необходимо помнить, что жесткий кэш инвалидируется только по истечению времени жизни (configs/main.php),
 * используется в случае неприменимости триггеров изменений
 */
public function getList($params = false, $filters = false , $fields = '*' , $useCache = false )

/**
 * Получить список записей (используется контроллерами CRUD_VC)
 * @param array $params  - параметры array('start'=>0,'limit'=>10,'sort'=>'fieldname','dir'=>'DESC')
 * @param array $filters - фильтры
 * @param string $query — optional строка для поиска
 * @param mixed $fields — optional список полей
 * @param string $author - optional ключ для хранения ID автора записи
 * @param strong $lastEditor  - optional ключ для хранения ID последнего редактора
 * @param array $joins - optional, конфиг включений для Zend_Select:
 * array(
 *          array(
 *                'joinType'=>   joinLeft/left , joinRight/right , joinInner/inner
 *                'table' => array / string
 *                'fields => array / string
 *                'condition'=> string
 *          )...
 * )
 */
public function getListVc($params = false , $filters = false , $query = false , $fields = '*' ,
 $author = false , $lastEditor = false , $joins = false)
   
/**
 * Удалить запись
 * @param integer $recordId идентификатор записи
 * @param boolean $log — логировать изменения
 */ 
public function remove($recordId , $log = true)     

/**
 * Проверить уникальность значения поля
 * @param integer $recordId — идентификатор записи
 * @param string $fieldName — имя поля
 * @param mixed $fieldValue — значение поля
 * @return boolean
 */
public function checkUnique($recordId , $fieldName , $fieldValue)

/**
 * Фабричный метод инстанцирования модели
 * @param string $objectName — имя объекта в ORM
 * @return Model
 */
static public function factory($objectName)
/**
 * Установить адаптер хранилища объектов по умолчанию
 * @param Db_Object_Store $store
 * @deprecated устарело с  0.9.1
 */
static public function  setGlobalObjectStore(Db_Object_Store $store)

/**
 * Установить адаптер хранилища объектов для объекта модели
 * @param Db_Object_Store $store
 */ 	 	 	
public function setObjectsStore(Db_Object_Store $store)

/**
 * Получить адаптер хранилища объектов
 * @return Db_Object_Store
 */
public function getStore()

/**
 * Получить имя первичного ключа
 * @return string
 */
public function getPrimaryKey()

/**
 * Установить менеджер соединений с БД по умолчанию (с версии 0.9.1)
 * @param Db_Manager_Interface $manager
 */
static public function setDefaultDbManager(Db_Manager_Interface $manager)

/**
 * Установить менеджер соединений с БД для текущей модели (с  версии 0.9.1)
 * @param Db_Manager_Interface $manager
 */
public function setDbManager(Db_Manager_Interface $manager)

/**
 * Установить адаптер логгирования по умолчанию
 * @param Log $log
 */
static public function setDefaultLog(Log $log)

/**
 * Установить адаптер логирования для текущей модели
 * @param mixed Log | false $log
 */
public function setLog($log)

/**
 * Отправить сообщение об ошибке в лог (с версии 0.9.2.5)
 * @param string $message
 */
public function logError($message)

}

 

ПРИМЕР:

$data = Model::factory('News')->getList(
    array(
        'sort'=>'news_date',
        'dir'=>'DESC',
        'start'=>0,
        'limit'=>10
    ),
    array('published'=>true),
    array('id','title','news_date'),
    true
);   

 

comments powered by Disqus