通过模式更新modx xpdo插入。查询现在失败了

时间:2015-12-04 12:06:21

标签: php modx-revolution xpdo

标题可能不正确但在这种情况下。

在使用migx的modx中,我为自定义表创建了一个自定义包。

它看起来像这样:

<object class="Orders" table="orders" extends="xPDOSimpleObject">
    <field key="contract_id" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" />
    <field key="customer_id" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" />
    <field key="in_datetime" dbtype="timestamp" phptype="timestamp" null="false" default="0000-00-00 00:00:00" />
    <field key="out_datetime" dbtype="timestamp" phptype="timestamp" null="false" default="0000-00-00 00:00:00" />      
    <field key="vehicledata" dbtype="text" phptype="string" null="false" />
    <field key="total_price" dbtype="decimal" precision="10,2" phptype="float" null="false" />
</object>

执行插入的代码是:

    $oOrder -> set('contract_id', (int) $iContractid );
    $oOrder -> set('customer_id', (int) $aProfile['id'] );
    $oOrder -> set('in_datetime', (string) $startdaterev . ' ' . $starttime . ':00' );  
    $oOrder -> set('out_datetime', (string) $enddaterev . ' ' . $endtime . ':00' ); 
    $oOrder -> set('vehicledata', (string) json_encode( $aPostedvehicleprops ) );   

    if( $oOrder -> save() )
    {
        $iOrderid = (int) $oOrder -> get('id') ; // last insert id
        print '<br>orderid:' . $iOrderid ;
    }
    else
    {
        throw new Exception('unable to save order data');
    }

它就像一个魅力。

但是,我已经在表格中添加了3个额外的字段。整数,无符号10。

使用migx更新了架构。它现在:

<object class="Orders" table="orders" extends="xPDOSimpleObject">
    <field key="contract_id" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" />
    <field key="customer_id" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" />
    <field key="in_datetime" dbtype="timestamp" phptype="timestamp" null="false" default="0000-00-00 00:00:00" />
    <field key="out_datetime" dbtype="timestamp" phptype="timestamp" null="false" default="0000-00-00 00:00:00" />
    <field key="dropoffplace_id" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" />
    <field key="pickupplace_id" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" />
    <field key="storagetype_id" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" />
    <field key="vehicledata" dbtype="text" phptype="string" null="false" />
    <field key="total_price" dbtype="decimal" precision="10,2" phptype="float" null="false" />
</object>

现在插入查询是:

    $oOrder -> set('contract_id', (int) $iContractid );
    $oOrder -> set('customer_id', (int) $aProfile['id'] );
    $oOrder -> set('in_datetime', (string) $startdaterev . ' ' . $starttime . ':00' );  
    $oOrder -> set('out_datetime', (string) $enddaterev . ' ' . $endtime . ':00' ); 
    $oOrder -> set('dropoffplace_id', (int) $iDropoffid  );
    $oOrder -> set('pickupplace_id', (int) $iPickupid );    
    $oOrder -> set('storagetype_id', (int) $iStoragetypeid );
    $oOrder -> set('vehicledata', (string) json_encode( $aPostedvehicleprops ) );   

    if( $oOrder -> save() )
    {
        $iOrderid = (int) $oOrder -> get('id') ; // last insert id
        print '<br>orderid:' . $iOrderid ;
    }
    else
    {
        throw new Exception('unable to save order data');
    }

并且已经存在的列的数据被正确插入,因此不会抛出任何错误,但是即使变量值已设置且类型正确,3个新字段仍为空。

我已经删除了缓存文件夹,再次重新创建了方案,新的字段也在方案中,甚至在物理上也包含在它们中。

当然是第一个问题;为什么新字段完全被忽略?

第二个问题,在为新表创建方案时,生成的方案还包括具有相同自定义前缀的所有其他自定义字段的所有数据。这应该发生吗?或者该方案是否应仅为新创建的表包含新生成的模式数据?

1 个答案:

答案 0 :(得分:1)

从未使用过migx所以我不确定它是否应该自动执行此操作,但是您需要为新架构重新生成类文件,所以;

  • 检查是否实际创建了新的类文件
  • 检查现有的类文件是否具有新字段的更新代码

不确定Q2 - 就像我说我从未使用过migx,IMO构建自己的架构&amp;构建脚本为您提供了更好的机会[洞察力]来追踪这样的问题。

Developing an Extra in MODX Revolution