Центр документации
Карта сайта

Создай визитку сам!


Самоучитель по интеграции дизайна и настройке Amiro.CMS на примере демонстрационной версии пакета Визитка »


Зависимые модели

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

Для добавления зависимостей между моделями двух модулей применяется метод setDependence.
Активация зависимости моделей (только после данной операции, будет происходить соединение таблиц) выполняется методом setActiveDependence.

Пример

Есть модуль inst_ami_sample, модель которого имеет доступ к элементам модуля и модуль inst_ami_sample_cat, чья модель отвечает за категории элементов модуля inst_ami_sample.
Связь между элементами и категориями осуществляется по полю id_cat модели модуля inst_ami_sample, в прямое соответствие которому ставится идентификатор элемента модели inst_ami_sample_cat.

Для начала требуется прописать зависимость между моделями модуля inst_ami_sample и inst_ami_sample_cat по идентификатору.
Лучше всего сделать это в конструкторе модели модуля inst_ami_sample

class InstAmiSample_Table extends AMI_ModTable{
  
    public function __construct(){
        $this->setDependence('inst_ami_sample_cat', 'cat', 'cat.id=i.id_cat');
        // ...
    }
  
    // ...
  
}

При получении модели данных модуля inst_ami_sample создается неактивная зависимость с именем "cat", которая свяжет эту модель с моделью данных модуля inst_ami_sample_cat по условию cat.id = i.id_cat (поля текущей модели всегда имеют префикс i).

Активировать зависимость можно непосредственно перед получением данных: 

AMI::getResourceModel('inst_ami_sample/table')->setActiveDependence('cat');

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

/**
 * @var InstAmiSample_Table
 */
$oTable = AMI::getResourceModel('inst_ami_sample/table');
$oTable->setActiveDependence('cat');
 
/**
 * @var InstAmiSample_TableList
 */
$oTableList = $oTable->getList();
$oTableList->addColumn('header');
$oTableList->addColumn('header', 'cat');
$oTableList->load();

Поля элементов зависимой модели будут доступны в модели элемента основной модели с префиксом соответствующим имени зависимости (в данном случае "cat_").

foreach($oTableList as $oTableItem){
    $itemHeader = $oTableItem->header;
    $catHeader = $oTableItem->cat_header;
}
Установка и настройка Руководство пользователя Интеграция дизайна Разработчикам (API)
 2000 – 2021 © Amiro.CMS Все права защищены.