Я пытаюсь выяснить, как правильно обращаться с формой, получающей реляционные данные в Yii2. Я не смог найти хороших примеров этого. У меня есть 2 модели Sets и SetsIntensity, каждый набор может иметь связанную с ним SetsIntensity. Я пытаюсь сделать форму, где вы можете вводить оба одновременно. Я не уверен, как обрабатывать ввод данных для определенной «интенсивности» поля в SetsIntensity.Реляционный атрибут в форме Yii2
Где
$model = new \app\models\Sets();
Если я ставлю его в поле, как эта проверка клиента не будет работать, и имя атрибута является неоднозначным и экономия становится трудно
<?= $form->field($model, 'lift_id_fk') ?>
<?= $form->field($model, 'reps') ?>
<?= $form->field($model, 'sets') ?>
<?= $form->field($model, 'type') ?>
<?= $form->field($model, 'setsintensity') ?>
Я хотел бы сделать что-то например, я получаю сообщение об ошибке, если у меня есть
<?= $form->field($model, 'setsintensity.intensity') ?>
Exception (Unknown Property) 'yii\base\UnknownPropertyException' with message 'Getting unknown property: app\models\Sets::setsintensity.intensity'
Я мог бы сделать еще один объект в контроллере $setsintensity = new Setsintensity();
, но я считаю, что это неуклюжее решение, и, вероятно, не является хорошей практикой, особенно для обработки кратных отношений
<?= $form->field($setsintensity, 'intensity') ?>
соответствующий код из SetsModel
class Sets extends \yii\db\ActiveRecord
{
public function scenarios() {
$scenarios = parent::scenarios();
$scenarios['program'] = ['lift_id_fk', 'reps', 'sets', 'type', 'intensity'];
return $scenarios;
}
public function rules()
{
return [
[['lift_id_fk'], 'required'],
[['lift_id_fk', 'reps', 'sets','setsintensity'], 'integer'],
[['type'], 'string', 'max' => 1],
['intensity', 'safe', 'on'=>'program']
];
}
public function getSetsintensity()
{
return $this->hasOne(Setsintensity::className(), ['sets_id_fk' => 'sets_id_pk']);
}
SetsIntensity Model
class Setsintensity extends \yii\db\ActiveRecord
{
public static function tableName()
{
return 'setsintensity';
}
public function rules()
{
return [
[['sets_id_fk', 'intensity', 'ref_set'], 'required'],
[['sets_id_fk', 'intensity', 'ref_set'], 'integer']
];
}
public function getSetsIdFk()
{
return $this->hasOne(Sets::className(), ['sets_id_pk' => 'sets_id_fk']);
}
}
I тоже думал, может быть, я мог бы установить отношение hasOne()
для конкретного атрибута 'интенсивность' в 'Sets'
Тогда я получаю сообщение об ошибке, как этот вызов функции члена FORMNAME() на не-объект – Ric
, потому что «каждый комплект ** ** может иметь один SetsIntensity» – soju
Ну на данный момент ни одно из множеств имеют SetsIntensity еще, я хочу получить это от пользователя – Ric