[Implemented] Propel tablePrefix attribute for database element

0 votes
asked Oct 18, 2013 in Solved by Radoslaw Maliborski (310 points)
recategorized Oct 25, 2013 by ludek.vodicka

I couldn't find the possibility to set the "tablePrefix" attribute for the "database" element in the exported DB schema file.
I suppose the proper place for it would be in the module settings in the application.
Please see the Propel's DB schema specs for details:
http://propelorm.org/reference/schema.html#database-element

1 Answer

0 votes
answered Oct 18, 2013 by ludek.vodicka Skipper developer (140,450 points)
selected Oct 25, 2013 by Radoslaw Maliborski
 
Best answer

thanks for information. You're right that tablePrefix attribute is missing in our configuration file (together with schema attribute).
Next version will contain fix for this issue. In the meanwhile please use following quick fix:

Please edit file Configuration/Propel.ormd2.cfg.xml in your installation directory and add following lines:

            <attribute name="schema" type="string" help-text="pecifies the default SQL schema containing the tables. Ignored on RDBMS not supporting database schemas"/>
            <attribute name="tablePrefix" type="string" help-text="adds a prefix to all the SQL table names."/>

anywhere between line 30 and 38 (inside struct element) :

  <struct name="Module">
    <attribute name="name" type="string" help-text="name which is exported to database element"/>
    <attribute name="defaultIdMethod" type="enum" enum-values="native|none" help-text="default=`none`"/>
    <attribute name="package" type="string" help-text="default=`project name`"/>
    <attribute name="baseClass" type="string" help-text="default=`propel.om.BaseObject`"/>
    <attribute name="basePeer" type="string" help-text="default=`propel.util.BasePeer`"/>
    <attribute name="defaultPhpNamingMethod" type="enum" help-text="default=`underscore`" enum-values="nochange|underscore|phpname"/>
    <attribute name="heavyIndexing" type="bool" help-text="default=`false`"/>
    <attribute name="namespace" type="string" help-text="Namespace for all entities in this module"/>
    <attribute name="schema" type="string" help-text="pecifies the default SQL schema containing the tables. Ignored on RDBMS not supporting database schemas"/>
    <attribute name="tablePrefix" type="string" help-text="adds a prefix to all the SQL table names."/>
    <ordered name="behaviors" type="/Behaviors"/>
  </struct>

Please let me know if this fix resolve your problem.

commented Oct 25, 2013 by Radoslaw Maliborski (310 points)

Well, it seems to solve the problem partially.
The attribute is correctly exported into the schema file, but when you run propel-gen, it reports the tables, which are affected by the prefix, cannot be found when processing foreign keys. It happens because these table names when exported into <"foreign-key" foreignTable=""> weren't prefixed. So effectively you can define the table prefix but your project won't be built correctly by the propel's generator.

Apart from this, the "skipSql" attribute (and maybe some more?) for associations is also missing (see: http://propelorm.org/reference/schema.html#foreign-key-element). I used your solution for that, it seems to work, but it would be nice not to have to correct it after installing the application;).

commented Oct 25, 2013 by ludek.vodicka Skipper developer (140,450 points)

Thanks for feedback. So If I understand correctly, propel supports prefix for tables in separate attribute but it's still necessary to export this prefix directly to tableNames? It's seems pretty weird to me ;-).

Could you please share some code snippet which works correctly for you?

Regarding to other Propel attributes, I will check it all and update ORM Designer configuration files.

commented Oct 25, 2013 by ludek.vodicka Skipper developer (140,450 points)
edited Jun 17, 2014 by Martin Freki Stradej

All new properties should be added in latest released version: http://www.orm-designer.com/download-orm-designer

...