-
Notifications
You must be signed in to change notification settings - Fork 9
Core_Model
В текущем представлении модель - это одна запись в БД, менеджер модели - это соответствующая таблица:
<?php
/**
* @see Zend_Db_Table_Row_Abstract
*/
class Model_Page extends Core_Db_Table_Row_Abstract
{
}
/**
* @see Zend_Db_Table_Abstract
*/
class Model_Page_Table extends Core_Db_Table_Abstract
{
/** Table name */
protected $_name = 'pages';
/** Primary Key */
protected $_primary = 'id';
/** Row Class */
protected $_rowClass = 'Model_Page';
}
?>
<?php
$page = new Model_Page();
$page ->setFromArray($data);
$page ->save();
$page = new Model_Page();
$page ->title = 'Test';
$page ->alias = 'test';
$page ->content = '<h2>Test</h2><p>Content, content, content</p>';
$page ->save();
?>
<?php
$pageManager = new Model_Page_Table();
$page = $pageManager->find($id);
$page = $pageManager->create($data);
$page ->save();
?>
Магический поиск осуществляется при помощи методов вида:
<?php
$manager->getByColumn($value);
$manager->getByColumn1AndColumn2($value1, $value2);
// и т.д.
?>
Все имена полей в имени магического метода - CamelCased?, причем в таблице эти имена должны быть строчными (в нижнем регистре), слова в имени поля в таблице разделяются знаком подчеркивания. Имени поля CamelCased? должно соответствовать табличное имя поля camel_cased.
Имена полей таблицы разделяются словами And или Or, указывающими на условие использования в выражении Where последующего сравнения относительно предыдущего.
Все аргументы являются значениями для условий where типа column_name = column_value (column_value - соответствующий аргумент)
Например:
<?php
$manager->getByStatusOrPassword(2,'e10adc3967bq79abbe56e057f20f883e');
//создает запрос с WHERE (`status` = 2) OR (`password` = 'e10adc3967bq79abbe56e057f20f883e')
?>
Любое значение аргумента файндера закавычивается, если не является экземпляром класса Zend_Db_Expr?. В случае Zend_Db_Expr? просто конкатенируется с выражением "column_name" = .
Например:
<?php
$manager->getByStatusOrId(2,Zend_Db_Expr('(select id from users where login = admin)'));
//создает запрос с WHERE (`status` = 2) OR (`id` = (select id from users where login = admin) )
?>