Yii2:将复选框 false 保存为 NULL

Yii2: save checkbox false as NULL

在 Yii2 中,我 ActiveForm 带有复选框字段。在 mysql 数据库中,tinyint(1) 列可以是 NULL

我需要未选中的复选框(false 值)在数据库中保存为 NULL。目前当复选框未被选中时,它被保存为 (int) 0.

false 值保存为 NULL 的正确方法是什么?

这是模型:

class ProductToProductCategory extends ActiveRecord {

    public function rules()
    {
        return [
            ['product_category_id', 'required'],
            ['product_category_id', 'integer'],
            ['is_main', 'boolean'],
        ];
    }
}

视图如下:

<?= $form->field($model, "is_main")->checkbox() ?>

从未尝试过,但您应该能够实现已保存模型的 beforeSave 方法。

public function beforeSave($insert)
{
    if (!parent::beforeSave($insert)) {
        return false;
    }

    if( $this->scenario == "strangeNullScenario" ) {
        if( empty( $this->FIELD ) ) {
            $this->FIELD = null;
        }
    }

    return true;
}
public function rules()
{
    return [
        ['product_category_id', 'required'],
        ['product_category_id', 'integer'],
        ['is_main', 'boolean'],
        ['is_main', 'filter', function ($value) {
            // return value you need
            return $value ?: null;
        }, 'skipOnError' => true],
    ];
}

只需通过取消选中选项

<?= $form->field($model, "is_main")->checkbox(['uncheck' => null]) ?>