Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在yii2表单中保存关系-如何避免属性重复?_Php_Yii2 - Fatal编程技术网

Php 在yii2表单中保存关系-如何避免属性重复?

Php 在yii2表单中保存关系-如何避免属性重复?,php,yii2,Php,Yii2,我有学生模型(id,姓名,学校id)和学校模型(id,姓名,…) 关系图式是:学校有很多学生,学生只能有一所学校 <?php class School extends \yii\db\ActiveRecord { /*.....*/ public function getStudents() { return $this->hasMany(Student::className(), ['school_id' => 'id']); } /*.....*/ } ?>

我有学生模型(id,姓名,学校id)和学校模型(id,姓名,…) 关系图式是:学校有很多学生,学生只能有一所学校

<?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关系是模型中的只读属性

但是我如何使用Yi2 activeForm和使用规则的验证,而不创建另一个伪造属性(student_ID),该属性不会保存到db,并且仅用于验证目的

这里有“正确”的路吗?
谢谢

如果我理解正确,你需要的是你只需要学校模型中显示的5个学生复选框

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

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

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

因此,每次使用此函数获取学生列表时,它只会获取前5条记录

我也一直在思考这个问题,并为表单制作另一个模型。你想出了什么解决办法?