We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 44757
    • 7 Posts

    I have successfully created class and map files from the following schema:


    <?xml version="1.0" encoding="UTF-8"?>
    <model package="timeManager"
    baseClass="xPDOObject"
    platform="mysql"
    defaultEngine="MyISAM"
    tablePrefix="tm_"
    phpdoc-package="timeManager"
    phpdoc-subpackage="model"
    version="1.1">

    <object class="Client" table="clients" extends="xPDOObject">
    <field key="id" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" index="pk" generated="native" />
    <field key="name" dbtype="varchar" precision="50" phptype="varchar" null="false" default="" />

    <composite alias="project" class="Project" local="id" foreign="client_id" cardinality="many" owner="local" />
    </object>

    <object class="Project" table="projects" extends="xPDOObject">
    <field key="id" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" index="pk" generated="native" />
    <field key="name" dbtype="varchar" precision="50" phptype="varchar" null="false" default="" />
    <field key="client_id" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="" />

            <aggregate alias="client" class="client" local="client_id" foreign="id" cardinality="one" owner="foreign" />

            <composite alias="timeChunk" class="TimeChunk" local="id" foreign="project_id" cardinality="many" owner="local" />
    </object>

    <object class="TimeChunk" table="timeChunks" extends="xPDOObject">
    <field key="id" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" index="pk" generated="native" />
    <field key="length" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="" />
    <field key="project_id" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="" />

    <aggregate alias="project" class="project" local="project_id" foreign="id" cardinality="one" owner="foreign" />
    </object>

    </model>




    However, when I execute the following code in a snippet, the package is added successfully but no new tables are created.


    if(!$modx->addPackage('timeManager',MODX_CORE_PATH.'components/timemanager/model/','tm_')){
    echo "Problem";
    }
    else echo "Success";

    $mgr = $modx->getManager();
    $mgr->createObjectContainer('Client');
    $mgr->createObjectContainer('Project');
    $mgr->createObjectContainer('TimeChunks');


    I've searched and tried many variations but cannot find a solution. Help appreciated!

    This question has been answered by multiple community members. See the first response.

    • discuss.answer
      • 4172
      • 5,888 Posts
      try this:

      <?xml version="1.0" encoding="UTF-8"?>
      <model package="timemanager"
      baseClass="xPDOObject"
      platform="mysql"
      defaultEngine="MyISAM"
      tablePrefix="tm_"
      phpdoc-package="timemanager"
      phpdoc-subpackage="model"
      version="1.1">
      
      <object class="Client" table="clients" extends="xPDOSimpleObject">
          <field key="name" dbtype="varchar" precision="50" phptype="varchar" null="false" default="" />
      
          <composite alias="project" class="Project" local="id" foreign="client_id" cardinality="many" owner="local" />
      </object>
      
      <object class="Project" table="projects" extends="xPDOSimpleObject">
          <field key="name" dbtype="varchar" precision="50" phptype="varchar" null="false" default="" />
          <field key="client_id" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" />
      
          <aggregate alias="client" class="client" local="client_id" foreign="id" cardinality="one" owner="foreign" />
      
          <composite alias="timeChunk" class="TimeChunk" local="id" foreign="project_id" cardinality="many" owner="local" />
      </object>
      
      <object class="TimeChunk" table="timeChunks" extends="xPDOSimpleObject">
      
          <field key="length" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" />
          <field key="project_id" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" />
      
          <aggregate alias="project" class="project" local="project_id" foreign="id" cardinality="one" owner="foreign" />
      </object>
      
      </model>
      


      package - all lowercase
      extend xPDOSimpleObject

      removed the id - definition, xPDOSimpleObject will do it automatically

      default="0" in int-fields

      And with MIGX installed, you can create (and extend) your tables with one click

      [ed. note: Bruno17 last edited this post 11 years, 3 months ago.]
        -------------------------------

        you can buy me a beer, if you like MIGX

        http://webcmsolutions.de/migx.html

        Thanks!
      • discuss.answer
        • 3749
        • 24,544 Posts
        Whenever you change the schema, you need to delete the class and map files and regenerate them. MODX pays no attention to the schema itself.
          Did I help you? Buy me a beer
          Get my Book: MODX:The Official Guide
          MODX info for everyone: http://bobsguides.com/modx.html
          My MODX Extras
          Bob's Guides is now hosted at A2 MODX Hosting
          • 44757
          • 7 Posts
          Thanks guys. That worked nicely wink

          Interestingly the database tables it created have the same prefix as the rest of the site tables, despite using the following two lines:

          <model package="timemanager"
          baseClass="xPDOObject"
          platform="mysql"
          defaultEngine="MyISAM"
          tablePrefix="tm_"

          if(!$modx->addPackage('timeManager',MODX_CORE_PATH.'components/timemanager/model/','tm_')){

          Any suggestions - nicer to have the custom tables separated.
          Cheers
          Toby
            • 4172
            • 5,888 Posts
            adding the package, using
            $modx->addPackage('timemanager',MODX_CORE_PATH.'components/timemanager/model','tm_');


            should have the tables created with the 'tm_' prefix
              -------------------------------

              you can buy me a beer, if you like MIGX

              http://webcmsolutions.de/migx.html

              Thanks!