Skip to content
This repository has been archived by the owner on Jun 4, 2021. It is now read-only.

Core_Model

Nikolay Galkin edited this page Jun 7, 2013 · 2 revisions

Введение

В текущем представлении модель - это одна запись в БД, менеджер модели - это соответствующая таблица:

<?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';
}
?>

Core_Model

<?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();
?>

Core_Model_Table

Манипулирование моделью

<?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) )
?>
Clone this wiki locally