php - Yii2 形式的关系属性

标签 php forms activerecord yii2 relational

我试图找出在 Yii2 中处理接收关系数据的表单的正确方法。我还没有找到任何好的例子。我有 2 个模型 Sets 和 SetsIntensity,每个 Set 可能有一个与之关联的 SetsIntensity。我正在尝试制作一个可以同时输入两者的表格。我不确定如何处理获取 SetsIntensity 中特定字段“强度”的输入。

在哪里

$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'

我可以在 Controller 中创建另一个对象 $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']);
}

设置强度模型

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

我也在想,也许我可以为“Sets”中的特定属性“intensity”放入一个hasOne() 关系

最佳答案

你应该简单地试试这个:

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

编辑 :因为“每个集合可能有一个SetsIntensity”,你应该在显示表单之前检查这个关系,例如:

if ($model->setsintensity===null)
{
    $setsintensity = new SetsIntensity;
    $model->link('setsintensity', setsintensity);
}

附言:link方法要求主键值不为空。

关于php - Yii2 形式的关系属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27271966/

相关文章:

mysql - 按桶分组(具有 NULL 值)

ruby-on-rails - NameError 异常:未初始化的常量 ActiveStorage::Attachment::ActiveStorage::Blob

php - 来自 jQuery Ajax 的 bool 参数在 PHP 中作为文字字符串 "false"/"true"接收

php - 从 PHP 代码创建触发器时出现语法错误

php - 多个AND条件在选择查询PHP myadmin MYSQL中一个条件不起作用

mysql - SQL 数据库的简单复选框值

postgresql - RoR/Postgres 查询所有父对象的第一个或最后一个子对象

php - 使用 PHP mail() 发送多部分/替代

c# - 将枚举绑定(bind)到 LINQ 和 SelectListItem

php - (php) 如何在目前已完成的表格中正确处理 'save' 信息