【问题标题】:Save value of checkboxlist to db in yii2在yii2中将checkboxlist的值保存到db
【发布时间】:2017-11-29 00:53:24
【问题描述】:

我有一个 yii2 表单,其中包含一个复选框列表项,我是这样制作的:

<?php $CheckList = ["users" => 'Users', "attendance" => 'Attendance', "leave" => 'Leave', "payroll" => 'Payroll'];?>

    <?= $form->field($model, 'MenuID')->checkboxList($CheckList,['separator'=>'<br/>']) ?>

现在我需要将数据库列中的值保存为逗号分隔值。

我尝试用这种方式修改控制器中的创建函数:

 public function actionCreate()
{
    $model = new Role();

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


        if ($model->MenuID != " ") {
           $model->MenuID = implode(",", $model->MenuID);                
        }
         $model->save();             
        return $this->redirect(['view', 'id' => $model->RoleID]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

但是这些值没有保存在数据库中

【问题讨论】:

  • 您好,尝试使用 PHP 函数 serialize() 将数组转换为字符串。 $array =implode(",", $model->MenuID); $model->MenuID = 序列化($array)

标签: php yii2


【解决方案1】:

你需要设置你的模型rules()。

当您调用$model-&gt;load(Yii::$app-&gt;request-&gt;post()); 时,框架调用方法setAttributes() 带有参数$safeOnly = true。此方法带有参数 $safe = true 根据模型规则检查属性是否安全。如果您对模型没有任何规则,则所有属性都被认为是不安全的,因此您的模型不会被填充。

在你的模型上添加 rules(),你的代码就可以工作了

class Role extends yii\db\ActiveRecord
{
    ...

    public function rules()
    {
        return [
            ['MenuID', 'your-validation-rule'],
        ];
    }

   ...

一些附加信息

注意如果您未在规则中指定场景,则默认场景为'default',并且如果在模型对象实例化期间您将场景设置为另一个无效。我的例子:

你的规则和我之前写的一样,你运行这段代码

...
$model = new Role(['scenario' => 'insert']);

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

加载后模型为空,因为在'insert' 场景中建立了任何规则,您的问题又回来了。因此,如果您想要一个仅适用于特定场景的规则,您必须添加 'on' 规则定义。像这样:

...
public function rules()
{
    return [
        ['MenuID', 'your-validation-rule', 'on' => 'insert'],
    ];
}
...

更多示例和解释请访问:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多