我需要将机器分配给机器组(m:n)。机器的安装使得必须使用带有checkboxcolumn的gridview来将机器分配给组。我得到了它的工作,关系得到了保存,但我没有想出如何在加载时在gridview中检查已经分配的机器。我的gridview的内容是基于MySQL-View的数据提供者。与
'checkboxOptions' => function($model, $key, $index, $column) {
return ['checked' => true];
}
可以检查所有复选框。但是,当我试图这样做时
'checkboxOptions' => function($model, $key, $index, $column) {
$bool = in_array($model->id_machine, common\models\MachineGroup::getAssignedMachines());
return ['checked' => $bool];
}
抛出错误:“不能使用yii \ web \ View类型的对象作为数组”。实际上我不明白这里的问题是什么,但我找不到一种方法将所有已选择的机器的数组传递给这个功能(我尝试了很多)。当我在函数中手动定义一个虚拟数组时,一切正常。这里需要一些帮助......谢谢!
答案 0 :(得分:2)
正如我在评论中所写,在回调之外定义变量
$machines = common\models\MachineGroup::getAssignedMachines();
然后在回调函数
中function($model, $key, $index, $column) use ($machines) {
$bool = in_array($model->id_machine, $machines);
return ['checked' => $bool];
}
答案 1 :(得分:0)
在Yii2 GridView中,您可以通过use keyword准备数据以检入checkboxcolumn,以便将变量用于匿名函数,并使用in_array()检查是否选中了正确的复选框。 这是一个例子。
//outside gridview prepare data list for check
$ar = [];
foreach(Model::find()->select(['id'])->asArray()->all() as $key => $val){
$ar[] = $val['id'];
}
//..... inside checkbox column
'checkboxOptions' => function($model, $key, $index, $column) use ($ar) {
$bool = in_array($model->id, $ar);
return ['checked' => $bool];
}
//.....