以yii2形式保存关系-如何避免属性重复


Saving relations in yii2 forms - how to avoid duplication in attributes?

我有学生模型(id,name,school_id)和学校模型(id、name,…)关系模式是:学校有很多学生,学生只能有一个学校。

<?php
class School extends 'yii'db'ActiveRecord
{
/*.....*/
public function getStudents()
{
    return $this->hasMany(Student::className(), ['school_id' => 'id']);
}
/*.....*/
}
?>

现在我想在学校创建表单上为每个学生呈现复选框:

<?= $form->field($model, 'students')->checkboxList(ArrayHelper::map($allStudents, 'id', 'name')) ?>

($model是学校的例子。为了简单起见,我们假设学生不多,所以复选框控制就足够了)

现在,如果我想添加验证规则以允许最多5名学生(使用School::rules()方法)-在表单提交时,我得到"尝试设置只读属性学生"

好吧,这意味着AR关系是模型中的只读属性。

但是,我如何使用Yii2 activeForm并使用规则进行验证,而不创建另一个不会保存到数据库并仅用于验证目的的伪属性(student_ids)?

这里有"正确"的路吗?谢谢

如果我理解正确,你需要的就像你只想在学校模型中显示5个学生复选框一样。

在这种情况下,也许你不需要做验证。

只需定义另一种关系,如:

public function getStudentsForSchool()
{
    return $this->hasMany(Student::className(), ['school_id' => 'id'],'limit'=>5);
}

因此,每次使用此功能获取学生列表时,它只会获得前5名的记录。