2

新しいエンティティの作成時にデフォルト値に自動的に設定されるカスタムEAV属性を追加する方法はありますか?

とを(デフォルト値)に設定eav_attribute.is_requiredしましたが、新しいオブジェクトを作成するときに属性が自動的に設定されません。1eav_attribute.default_value0

ちなみに、EAVエンティティタイプはshipmentです。販売データがフラットテーブルに保存される前に、1.3.2.4のインストールに取り組んでいます。

編集

Jonathan Dayは、「どのように属性を追加していますか?」と尋ねました。

ModuleDir \ sql \ module_setup \ mysql4-install-0.1.0.phpに、次のコードがあります。

$eav = new Mage_Eav_Model_Entity_Setup('sales_setup');
$eav->addAttribute('shipment', 'fieldname', array('type' => 'int'));

私はまた、Magentoの新しいバージョン(販売エンティティがEAVからフラットテーブルに移行した後)用にこのコードを持っています:

$w = $this->_conn;
$table = $this->getTable('sales_flat_shipment');
$w->addColumn($table, 'fieldname', 'int');
$w->addKey($table, 'fieldname', 'fieldname', 'index');

Jonathan Dayは、「属性が正しいフィールドでeav_attributeに追加されていることを確認しましたか?」と尋ねました。

はい、eav_attributeに追加されました。そして、属性はsettableとgettableです。

4

1 に答える 1

3

Varien_Object::getData()(in )を見る/lib/Varien/Object.phpと、次の行が表示されます。

$default = null;

...そして欠落データのインスタンスは.を返します$default。そのため、属性に設定したデフォルト値は無視されます。

未定義の「get」はgetData()それによって処理されるため、null常にデフォルトになります。唯一のオプションは、オーバーライドSales_Model_Order_Shipment(またはそれがどのエンティティモデルでも)してカスタムゲッターを提供することだと思われます。

簡単な例は次のとおりです。

function getSample()
{
    if (!$this->hasSample())
        return 0;

    return $this->getData('sample');
}
于 2011-01-06T21:17:20.447 に答える