Обновление modx xpdo через схему обновлено. запросы теперь не выполняются

Название, вероятно, не правильно, но вот ситуация.

В 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>

И запрос вставки теперь:

    $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, создающий вашу собственную схему и сценарии сборки, дает вам гораздо больше шансов на понимание таких проблем.

Разработка Extra в MODX Revolution

Другие вопросы по тегам