2015-06-30 5 views
0

Мне нужно назначить машины группе машин (m: n). Монтирование машин делает необходимым использовать gridview с checkboxcolumn для назначения машин группе. Я получил это, чтобы работать, что отношения сохраняются, но я не понял, как сделать все уже назначенные машины проверенными в gridview при загрузке. Содержимое моего gridview - это датаподаватель, основанный на MySQL-View. Сyii2 gridview set checkboxcolumn checked

'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 \ Посмотреть как массив». На самом деле я не понимаю, в чем проблема, но я не мог найти способ передать массив уже выбранных машин для этой функции (и я много пробовал). Когда я определяю фиктивный массив вручную в функции, все работает нормально. Нужна помощь здесь ... спасибо!

+0

Когда происходит ошибка, то строка '$ BOOL = in_array ($ модели-> id_machine, общие \ модели \ MachineGroup :: getAssignedMachines());' подсвечивается в сообщении об ошибке? – Tony

+0

нет ... вот сообщение об ошибке: –

+0

1. в C: \ xampp \ htdocs \ eddb1 \ vendor \ yiisoft \ yii2 \ db \ ActiveRelationTrait.php в строке 458 –

ответ

2

Как я писал в комментариях, определить переменную вне обратного вызова

$machines = common\models\MachineGroup::getAssignedMachines();

, а затем в функции обратного вызова

function($model, $key, $index, $column) use ($machines) { 
    $bool = in_array($model->id_machine, $machines); 
    return ['checked' => $bool]; 
} 
+0

привет Тони, вы там? Я опубликовал еще один вопрос относительно [рендеринга после отправки запроса] (http://stackoverflow.com/questions/31272381/yii2-render-after-post- запрос), но никто не может ответить на мой вопрос. Пожалуйста, помогите, застрял в течение одной недели. –

0

В Yii2 GridView вы можете подготовить данные для проверки в 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]; 
    } 
//..... 
+0

Hi Manop Kongo на; ваш код может быть правильным, но с некоторым контекстом он сделает лучший ответ; например, вы могли бы объяснить, как и почему это предлагаемое изменение разрешит проблему опроса, возможно, включая ссылку на соответствующую документацию. Это сделало бы его более полезным для них, а также более полезным для других читателей сайтов, которые ищут решения подобных проблем. –