Создаем модели правильно — Часть 3

Создаем модели правильно - Часть 3

Всем привет, я продолжаю серию статей про модели CakePHP (Первая и вторая). Сегодня мы будем говорить о том, что еще можно выжать из модели для оптимизации и более-простой разработки.

1. Использование таблицы в модели

Да, именно использование таблицы. По умолчанию таблица должна называться так же, как и модель, только во множественном числе, то есть, если модель называется Picture, таблица должна называться pictures. Очень часто приложение CakePHP может разрабатываться и внедряться к уже существующему приложению, которое по каким-то параметрам может не устраивать или не выполнять определенной функциональность. Часто это касается приложений, разработанных на чистом PHP без применения какого-либо фреймворка, так как они обычно предусматривают логичное название для таблицы. Что ж, чтобы победить такое недоразумение, можно в модели прописать, какую именно таблицу нужно использовать:

[sourcecode]
<?php
class Article extends AppModel {
var $name = ‘Article’;
var $useTable = ‘pages’;
}
?>
[/sourcecode]

Таким вот нехитрым образом мы привязали модель Articles к таблице pages.

2. Использование модели без таблицы.

Да, действительно, модель можно использовать и без таблицы. Классический пример — форма обратной связи, которая все данные отправляет владельцу приложения по электронной почте и нигде не сохраняет. Тогда модель будет иметь следующий вид:

[sourcecode]
<?php
class Fb extends AppModel {
var $name = ‘Fb’;
var $useTable = false;
var $_schema = array (
‘name’ => array (
‘type’ => ‘string’,
‘length’ => ’30′
),
‘email’ => array (
‘type’ => ‘string’,
‘length’ => ’30′
),
‘comment’ => array (
‘type’ => ‘text’
),
‘created’ => array (
‘type’ => ‘datetime’
)
);
}
?>
[/sourcecode]

Здесь я объявляю, что таблица не используется, а в переменной $_schema описываю структуру данных, которые данная модель представляет. По сути, здесь описываются поля виртуальной записи, которую данная модель будет обрабатывать.

Если мы создадим вьюшку следующего содержания, то увидим, что все описанные нами поля работают точно так же, как если бы они хранились в таблице:

[sourcecode]
<?php
echo $form->create(‘Fb’);
echo $form->inputs();
echo $form->submit();
?>
[/sourcecode]

Отображение созданной модели

Данные, которые мы получим из модели будут как всегда доступны в переменной $this->data

3. Отображаемое поле.

Очень часто встречаются, что данные из модели нужны только для какого-то справочника, например, в модели хранятся адреса клиентов. Если данная модель используется в качестве подстановки в другую модель, то данные об адресах клиентов нужно каким-то образом извлечь, а затем поместить в выпадающий список, чтобы легче было выбрать нужный. По-умолчанию, CakePHP при формировании списка для подстановки смотрит поля с названием name или title. Для тех же клиентов намного важнее может быть поле адреса, поэтому укажем в модели, какое именно поле нужно использовать в качестве подстановочного.

[sourcecode]
<?php
class Client extends AppModel {
var $name = ‘Client’;
var $displayField = ‘address’;
}
?>
[/sourcecode]

4. Виртуальные поля.

Ну вот, наконец, мы дошли и до последней вкусности на сегодня — виртуальных полей в CakePHP. Зачем, спросите вы, это нужно? Да тот же адрес обычно состоит из трех частей — названия улицы, номера дома и номера квартиры. Чтобы не мучиться и в скрипте уже на php не собирать эти данные вместе их можно сразу извлечь как новое поле, в котором будут все данные сразу скомпонованы. Делается это так:

[sourcecode]
<?php
class Client extends AppModel {
var $name = ‘Client’;
var $virtualFields = array (
‘address’ => "concat(Client.street, ‘ ‘, Client.building, ‘-’, Client.app)"
);
}
?>
[/sourcecode]

Формирование поля address происходит с помощью sql команды concat(), которая объединяет данные, указанные ей в качестве аргументов. Теперь вместо обращения к трем полям мы можем сразу получить адрес одним полем.

Для разгрузки мозга:

РЕКЛАМА
СЧЕТЧИКИ
 
ДРУЗЬЯ САЙТА
МОИ ПРОЕКТЫ
  • theLesenok.ru
  • 7genkov.ru