<?xml version="1.0" encoding="UTF-8"?>
<model package="companyprofiles" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" version="1.1">
<object class="cpState" table="cp_states" extends="xPDOSimpleObject">
<field key="name" dbtype="varchar" precision="50" phptype="string" null="false" default="" />
<field key="abbreviation" dbtype="varchar" precision="2" phptype="string" null="false" default="" />
<composite alias="Addresses" class="cpAddress" local="id" foreign="state_id" cardinality="many" owner="local" />
</object>
<object class="cpAddress" table="cp_addresses" extends="xPDOSimpleObject">
<field key="state_id" dbtype="int" precision="10" phptype="integer" null="false" default="" />
<field key="street" dbtype="varchar" precision="255" phptype="string" null="true" default="" />
<field key="city" dbtype="varchar" precision="255" phptype="string" null="true" default="" />
<field key="zip" dbtype="varchar" precision="20" phptype="string" null="true" default="" />
<aggregate alias="State" class="cpState" local="state_id" foreign="id" cardinality="one" owner="foreign" />
</object>
</model>
This is, how I would name things:
package-name all lowercase without any special-characters
field-names all lowercase, only underscores as special-characters
Classnames camel-case with prefix, which makes the names more unique
tablenames all lowercase, only underscores as special-characters
The alias of the relation is used for example in joins and in getMany or getOne - methods,
Examples, to get the idea:
if ($state = $modx->getObject('cpState',$state_id)){
if ($addresscollection = $state->getMany('Addresses'){
foreach ($addresscollection as $object){
$rows[] = $object->toArray();
}
}
}
if ($address = $modx->getObject('cpAddress',$address_id)){
if ($stateObject = $address->getOne('State'){
$row = $stateObject->toArray();
}
}