2015-12-04 28 views
0

標題可能不正確,但這是情況。通過架構更新modx 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

從未使用過migx,所以我不確定它是否應該自動執行此操作,但是您需要爲新模式重新生成類文件,所以;

  • 檢查新的類文件實際上是創建
  • 檢查現有的類文件有新的領域

不確定Q2更新代碼 - 就像我說我從來沒有使用migx,IMO構建自己的架構&構建腳本爲追蹤這樣的問題提供了更好的機會[見解]。

Developing an Extra in MODX Revolution