Php Yii2形式的关系属性

Php Yii2形式的关系属性,php,forms,activerecord,yii2,relational,Php,Forms,Activerecord,Yii2,Relational,我正试图找出处理Yii2中接收关系数据的表单的正确方法。我还没有找到这方面的好例子。我有2个模型集和设置强度,每套可能有一个与之相关的设置强度。我正在尝试制作一个表单,您可以同时输入这两个内容。我不知道如何处理在SetsIntensity中获取特定字段“强度”的输入 在哪里 如果我像这样将其放在字段中,客户端验证将不起作用,属性名称不明确,保存变得困难 <?= $form->field($model, 'lift_id_fk') ?> <?= $form->fiel

我正试图找出处理Yii2中接收关系数据的表单的正确方法。我还没有找到这方面的好例子。我有2个模型集和设置强度,每套可能有一个与之相关的设置强度。我正在尝试制作一个表单,您可以同时输入这两个内容。我不知道如何处理在SetsIntensity中获取特定字段“强度”的输入

在哪里

如果我像这样将其放在字段中,客户端验证将不起作用,属性名称不明确,保存变得困难

<?= $form->field($model, 'lift_id_fk') ?>
<?= $form->field($model, 'reps') ?>
<?= $form->field($model, 'sets') ?>
<?= $form->field($model, 'type') ?>
<?= $form->field($model, 'setsintensity') ?>
来自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']);
}
强度模型

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']);
    }
}

我还在想,也许我可以为“集合”中的特定属性“强度”设置一个
hasOne()
关系您应该简单地尝试一下:

<?= $form->field($model->setsintensity, 'intensity') ?>

PS:方法要求主键值不为null。

然后我在非对象上调用成员函数formName()时出现了类似这样的错误,因为“每个集合可能有一个SetsIntensity”。在这一点上,没有一个集合有SetsIntensity,我想从用户那里得到,我现在没有主键值,因为它们都是新创建的模型。在用户提交表单后,当我将其保存到db时,它只会得到一个主键,也许我根本看不到这个
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']);
}
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']);
    }
}
<?= $form->field($model->setsintensity, 'intensity') ?>
if ($model->setsintensity===null)
{
    $setsintensity = new SetsIntensity;
    $model->link('setsintensity', setsintensity);
}