标题可能不正确,但情况是这样的。
在modx中,使用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="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>而insert查询现在是:
$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个新字段仍然是空的。
我已经删除了缓存文件夹,重新创建了方案,新的字段在方案中,甚至物理上在new服务器上也包括在内。
当然,第一个问题是:为什么新字段被完全忽略了?
第二个问题,在为新表创建方案时,生成的方案还包括具有相同自定义前缀的所有其他自定义字段的所有数据。这是应该发生的吗?或者,该方案是否应该只包含新创建的表的新生成的模式数据?
发布于 2015-12-05 03:39:26
从未使用过migx,因此我不确定它是否应该自动执行此操作,但您需要为新模式重新生成类文件,因此;
不确定Q2 -就像我说的,我从来没有使用过migx,IMO构建你自己的模式和构建脚本让你有更好的机会深入了解像这样的问题。
https://stackoverflow.com/questions/34088043
复制相似问题