Magentoモデルで値をNULLに更新する正しい方法は何ですか?


12

カスタムモデルの値をNULLに更新する際に問題が発生します。

$model = Mage::getModel('custom/model')->load($id);
$model->setCustomValue(NULL);
$model->save();

このコードはcustom_valueデータベースのフィールドを更新せず、データベースの値はNULL値を受け入れます(データベースにNULLを手動で設定すると正常に機能します)。

編集: Timが以下を使用Zend_Db_Expr("NULL")して値をnullに設定すると述べているように、これが単にphpではなくMagentoで必要な理由を誰かが説明できNULLますか?


$ model-> setCustomValue( "");を試してください。
Mufaddal 14

テーブルフィールドのタイプは次のとおりです。double他の数値タイプを試してみdecimal$model->setCustomValue("");、値を次のように設定します0
呼び出す

7
いかが$null = new Zend_Db_Expr("NULL");ですか?
user487772 14

2
@Invoke、回答に返信するには、「NULL」に設定するだけの場合、Magentoは値を更新したくないと考えるだけです。Timが提案したように、設定するのはデータベース「NULL」であることを指定する必要があります。
Mayers

@ mayers-dev、興味深い行動に感謝します。値自体を生成している間に意図した更新をキャンセルする必要がある場合、それはget-out-clauseとして設計されたと思います。
呼び出す

回答:


2

これは、私がこれを正しく見ると、よくあることですが、isset()vsのarray_key_exists()問題です。

私はそれを試しませんでしたが、コードの読み取りから言うと、値はここでチェックされます:

\Mage_Eav_Model_Entity_Abstract::_saveAttribute
if (!isset($this->_attributeValuesToSave[$table])) {
    $this->_attributeValuesToSave[$table] = array();
}

issetであるセット配列キーに対してfalseを返すためNULL、値は上書きされます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.