Вот структура таблицы:
Table BaseTable
id (primary key) INT
description VARCHAR(255)
Table ChildTable
id (primary key)(foreign key reference to BaseTable) INT
child_property VARCHAR(255)
На самом деле это отношение наследования в таблице базы данных.
Тогда я использую gii
генерировать модели с функцией отношения для обоих и CRUD-операцией для ChildTable. Вот функция отношения в ChildTable:
public function getBaseTable()
{
return $this->hasOne(BaseTable::className(), ['id' => 'id']);
}
В сгенерированной форме ChildTable я хотел бы обновить свойство description
это BaseTable. Вот оригинальная форма ChildTable:
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'child_property')->textInput() ?>
<?php ActiveForm::end(); ?>
Попробуйте 1:
Я добавляю поле кода ниже:
<?= $form->field($model, 'baseTable.description')->textInput() ?>
Я получил эту ошибку:
Getting unknown property: app\models\ChildTable::baseTable.description
Попробуйте 2:
Я поле рекламного кода ниже:
<?= $form->field($model->baseTable, 'description')->textInput() ?>
Я получил еще одну ошибку:
Call to a member function formName() on null
Попробуйте 3:
Я использую отношение, чтобы получить модель BaseTable, код, как показано ниже:
<?= $form->field($model->getBaseTable()->one(), 'description')->textInput() ?>
Я все еще получил ошибку:
Call to a member function formName() on null
Идея:
У меня появилась идея, что я могу создать новую viewModel для сопоставления всего свойства из BaseTable
а также ChildTable
, Но я хотел бы знать, есть ли быстрое решение для реализации нескольких связанных ActiveRecord
модели основаны на коде, сгенерированном gii
? Спасибо!
Это:
<?= $form->field($model->baseTable, 'description')->textInput() ?>
должен работать с baseTable
правильное имя отношения. Связанная запись просто не существует (это null
как видно из ошибки).
Это может быть либо ошибка, связанная с неправильным заполнением предыдущих отношений, либо связь необязательна.
В последнем случае вам нужно проверить его на наличие (другими словами, null
) до доступа и отображения.
Это: $model->getBaseTable()->one()
не имеет никакого смысла, потому что это равно $model->baseTable
, Не стоит так называть отношения.
А насчет пути с точечной нотацией — здесь не получится.
Для загрузки и сохранения нескольких записей вы можете использовать:
Тогда просто позвоните save()
в цикле.
Других решений пока нет …