Как в форме создания записи загрузить значения из другой таблицы?

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

Для начала, давайте предположим, что у нас есть две таблицы: "users" и "roles". Таблица "users" содержит информацию о пользователях, а таблица "roles" содержит информацию о разных ролях пользователей.

1. Создайте модели для обеих таблиц. Модель "Users" будет связана с таблицей "users", а модель "Roles" будет связана с таблицей "roles".

class Users extends yiidbActiveRecord
{
    // ...
    
    public function getRole()
    {
        return $this->hasOne(Roles::class, ['id' => 'role_id']);
    }
}

class Roles extends yiidbActiveRecord
{
    // ...
}

2. В форме создания записи в модели "Users", добавьте поле выбора роли пользователя. Можно использовать поле типа "DropdownList" или "DropDown".

<?= $form->field($model, 'role_id')->dropDownList(
    ArrayHelper::map(Roles::find()->all(), 'id', 'name'),
    ['prompt' => 'Выберите роль']
) ?>

Здесь мы используем метод dropDownList для создания поля выбора роли. Мы передаем список выбора, который строим с помощью ArrayHelper::map, и указываем prompt чтобы отобразить значение по умолчанию (пустую строку) в выпадающем списке.

3. В контроллере, в экшене, который обрабатывает отправку формы, произведите сохранение записи в таблицу "users".

public function actionCreate()
{
    $model = new Users();

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['view', 'id' => $model->id]);
    }

    return $this->render('create', [
        'model' => $model,
    ]);
}

Здесь мы использовали метод load для заполнения модели данными из POST запроса, а затем метод save для сохранения модели в базу данных.

4. Теперь, при создании новой записи, значение выбранной роли будет сохранено в поле "role_id" в таблице "users".

- Если вы используете средства аутентификации Yii2, то, возможно, вам понадобится переопределить метод signup в модели User, чтобы установить значение роли:

public function signup()
{
    if (!$this->validate()) {
        return null;
    }

    $user = new User();
    $user->username = $this->username;
    $user->email = $this->email;
    $user->setPassword($this->password);
    $user->generateAuthKey();

    // Устанавливаем роль пользователю
    $role = Roles::findOne(['name' => 'user']);
    $user->role_id = $role->id;

    return $user->save() ? $user : null;
}

Здесь мы используем метод findOne для получения объекта роли, и затем устанавливаем значение role_id в модели пользователя.

Таким образом, при создании нового пользователя, будет автоматически установлена роль "user".

Вот и все! Теперь вы знаете, как загрузить значения из другой таблицы в форму создания записи в Yii фреймворке.