我试图找出在 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/