Silverstripe MoneyField被更改,始终返回true

Silverstripe MoneyField被更改,始终返回true,silverstripe,Silverstripe,我有一个数据对象确认,如下所示: <?php class Confirmation extends DataObject { private static $db = array( 'Reimbursement' => 'Money', 'SomeText' => 'Varchar(255)' ); private static $has_one = array( 'Page' =>

我有一个
数据对象
确认
,如下所示:

<?php

class Confirmation extends DataObject
{

    private static $db = array(
        'Reimbursement' => 'Money',
        'SomeText'      => 'Varchar(255)'
    );

    private static $has_one = array(
        'Page'  => 'Page'
    );

    public function getCMSFields()
    {

        $fields             = parent::getCMSFields();
        $reimbursementField = MoneyField::create('Reimbursement');
        $someTextField      = TextField::create('SomeText');

        $reimbursementField->setAllowedCurrencies(array('SEK'));

        $fields->addFieldsToTab(
            'Root.Main',
            array(
                $reimbursementField,
                $someTextField
            )
        );

        return $fields;

    }

    public function onBeforeWrite()
    {
        parent::onBeforeWrite();
        if($this->isChanged('Reimbursement')) SS_Log::log( print_r ( 'changed', true ), SS_Log::WARN );
    }

}

你的确认书和金钱模型之间可能存在一种不可靠的关系——你能分享他们的关系吗?@RobbieAverill谢谢。我对问题进行了沙盒处理,并发布了整个
DataObject
-请查看更新的问题。@Janne Klouman您是对的,Money::isChanged总是设置为true。尝试使用
$confirmation->replumentamount
$confirmation->replumentcurrency
作为原始数据库值。是的,我最后检查了
$this->replumentamount->getAmount()self::get()->byID($this->ID)->报销->获取金额()
查看字段是否已更改。
[22-Mar-2016 16:28:07] Warning at framework/model/DataObject.php line 2597: Array
(
    [Reimbursement] => Array
        (
            [before] => 
            [after] => Money Object
                (
                    [currency:protected] => SEK
                    [amount:protected] => 25000
                    [isChanged:protected] => 1
                    [locale:protected] => 
                    [currencyLib:protected] => Zend_Currency Object
                        (
                            [_options:protected] => Array
                                (
                                    [position] => 8
                                    [script] => 
                                    [format] => 
                                    [display] => 2
                                    [precision] => 2
                                    [name] => svensk krona
                                    [currency] => SEK
                                    [symbol] => kr
                                    [locale] => sv_SE
                                    [value] => 0
                                    [service] => 
                                    [tag] => Zend_Locale
                                )

                        )

                    [allowedCurrencies:protected] => 
                    [value:protected] => 
                    [tableName:protected] => 
                    [name:protected] => Reimbursement
                    [arrayValue:protected] => 
                    [defaultVal:protected] => 
                    [failover:protected] => 
                    [customisedObject:protected] => 
                    [objCache:ViewableData:private] => Array
                        (
                        )

                    [class] => Money
                    [extension_instances:protected] => Array
                        (
                        )

                    [beforeExtendCallbacks:protected] => Array
                        (
                        )

                    [afterExtendCallbacks:protected] => Array
                        (
                        )

                )

            [level] => 2
        )

)