Загрузите представление единого администратора с несколькими таблицами и формами

У нас есть 2 таблицы, которые имеют данные, и нам нужно принести данные из обеих таблиц и показать в одном представлении.

У нас есть один XML-файл, который содержит поля обеих таблиц.

Функция 'getForm' в модели может загружать все поля из XML и может загружать элементы HTML в форму.

Проблема заключается в том, что функция 'getItem' может только переносить данные из одной таблицы, а не из другой таблицы. Я думаю, так как функция getTable связана с первой таблицей, она только переносит данные из первой таблицы.

Как мы можем загружать данные из второй таблицы внутри getItem?

2 голоса | спросил Malaiselvan 26 PMpSun, 26 Apr 2015 21:06:48 +030006Sunday 2015, 21:06:48

1 ответ


3

В классе модели вы хотите переопределить метод getItem следующим образом:

public function getItem() {
    $item = parent::getItem();

    $item->second_table = $this->getSecondTable($item->second_table_foreign_key);
    $item->third_table = $this->getThirdTable($item->third_table_foreign_key);
    return $item;
}

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

private function getSecondTable($id) {
    $model = JModelLegacy::getInstance('SecondTable','MyComponentModel');
    $table = $model->getTable('SecondTable', 'MyComponentTable');
    return $table->load($id);
}

Важно, чтобы имена полей определения формы xml по-прежнему соответствовали фактическим именам столбцов во второй и третьей таблицах. Наконец, вам нужно будет сделать обратное событие сохранения. Опять же, вы перегрузите метод сохранения в модели:

public function save($data) {
    $this->saveSecondTableData($data);
    $this->saveThirdTableData($data);
    parent::save($data);
}

Вы можете снова использовать класс таблицы в своих вспомогательных методах для сохранения:

private function saveSecondTableData($data) {
    $model = ModelLegacy::getInstance('SecondTable','MyComponentModel');
    $table = $model->getTable('SecondTable', 'MyComponentTable');
    $table->bind($data);
    $table->store();
    parent::save($data);
}

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

Кроме того, предполагается, что вы хотите сохранить любые изменения в данных вспомогательной таблицы, которые необходимо сохранить в БД. Если вы хотите только отобразить данные, то левое соединение в методе getListQuery () будет сортироваться немедленно.

Однако базовая концепция для подключения нескольких таблиц к одному виду существует.

ответил Brian Bolli 27 PMpMon, 27 Apr 2015 16:47:33 +030047Monday 2015, 16:47:33

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132