2017-09-19 10 views
0

Yii2では、チェックボックスのフィールドにActiveFormがあります。 mysqlデータベースではtinyint(1)列であり、NULLになります。Yii2:チェックボックスを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() ?> 

答えて

1
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], 
    ]; 
} 
1

はそれを試したことはありませんが、あなたは、保存されたモデルのbeforeSave方法を実現する、それを行うことができるはずです。

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

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

    return true; 
} 
+0

アイデアのおかげで、私は 'beforeSave()'の承知していますが、私はそれならばこれを行うための適切な方法を確認していない... 'beforeSave'は世界的に動作しますが、私がしたいと思いますこの振る舞いを特定のシナリオに限定し、プロジェクト全体に広げないようにします。 – cronfy

+0

保存するシナリオをbeforeSaveにチェックインする必要があります。更新された答え。 – gmazzotti

関連する問題