保存多个 checkboxList

Save multiples checkboxList

我有一个带有通过模型“候选人”生成的复选框列表的表格,我需要投票,选民可以 select 多个候选人并记录。

我如何 'pick up' selected 候选人并写信给选票 table / 模型 ??

形成“投票”

<?php $form = ActiveForm::begin(); ?>

<?= $form->field($model, 'candidato_id')->checkboxList(ArrayHelper::map(Candidatos::find()->where(['status' => 1])->orderBy("nome ASC")->all(), 'id', 'nome')); ?>

<?= Html::activeHiddenInput($model, 'eleicao_id', ['value' => 1]) ?>

<?= Html::activeHiddenInput($model, 'cargo_id', ['value' => 1]) ?>

<?= Html::activeHiddenInput($model, 'urna_id', ['value' => 1]) ?>

<div class="form-group">
    <?= Html::submitButton('Save', ['class' => 'btn btn-success']) ?>
</div>

<?php ActiveForm::end(); ?>

模型“投票”

namespace app\models;
use Yii;

class Votos extends \yii\db\ActiveRecord
{
    
    public static function tableName()
    {
        return 'votos';
    }

    public function rules()
    {
        return [
            [['eleicao_id', 'candidato_id', 'cargo_id', 'urna_id', 'data'], 'required'],
            [['eleicao_id', 'candidato_id', 'cargo_id', 'urna_id'], 'integer'],
            [['data'], 'safe'],
        ];
    }

    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'eleicao_id' => 'Eleicao ID',
            'candidato_id' => 'Candidato ID',
            'cargo_id' => 'Cargo ID',
            'urna_id' => 'Urna ID',
            'data' => 'Data',
        ];
    }
}

控制器“投票控制器”

public function actionVotacao()
    {
        $model = new Votos();

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        }

        return $this->render('votacao', [
            'model' => $model,
        ]);
    }

稍微不相关,但如果您还没有设置,我强烈建议您确保设置了 xdebug 之类的东西,这样您可以在进行更改时快速查看代码在做什么。能够设置断点并查看您的表单提交的内容可以大大帮助您自行解决此类问题,并且框架变得不那么神秘。有了这个,就控制器而言,像下面这样的东西可能会有所帮助。你还想做其他验证,我应该补充一下。也许 each 验证器你可以 read up on here。对于 actionUpdate(),您需要考虑删除与相关 ID 相关的所有值,并使用新值删除 re-populate,检查 deleteAll。希望我不会因为提供这个解决方案而不是解决方案而受到太大的打击。

public function actionVotacao()
{
    $model = new Votos();

    if (Yii::$app->request->isPost) {
        $model->load(Yii::$app->request->post());

        if ($model->save()) {
            // Save the checkbox values.
            if (!empty(Yii::$app->request->post()['Votos']['XXXX'])) { // Your form should give you an idea of what the XXXX should be, xdebug is also your friend.
                foreach (Yii::$app->request->post()['Votos']['XXXX'] as $candidato_id) {
                    $candidato = new Candidato();
                    $candidato->id = $candidato_id;

                    if (!$candidato->save()) print_r($candidato->errors);
                }
            }
        }

        return $this->redirect(['view', 'id' => $model->id]);
    }

    return $this->render('create', [
        'model' => $model,
    ]);
}