Всем привет!
Возник вопрос по xPDO в Modx Revo.
Есть 2 таблицы.
<object class="CatalogmanagerItem" table="catalogmanager_item" extends="xPDOSimpleObject">
<field key="type" dbtype="varchar" precision="100" phptype="string" null="false" default="" />
<field key="pagetitle" dbtype="varchar" precision="255" phptype="string" null="false" />
<field key="parentid" dbtype="int" precision="10" phptype="integer" null="false" default="0" index="index" />
<field key="menuindex" dbtype="int" precision="20" phptype="integer" null="false" />
<field key="active" dbtype="tinyint" precision="1" phptype="integer" null="false" default="1" />
<field key="delete_object" dbtype="tinyint" precision="1" phptype="integer" null="false" default="0" />
<field key="class" dbtype="varchar" precision="50" phptype="string" null="true" />
<index alias="parentid" name="parentid" primary="false" unique="false" type="BTREE" >
<column key="parentid" length="" collation="A" null="false" />
</index>
<composite alias="Data" class="CatalogmanagerXtype" local="id" foreign="object_id" cardinality="many" owner="local" />
</object>
<object class="CatalogmanagerXtype" table="catalogmanager_xtype" extends="xPDOSimpleObject">
<field key="object_id" dbtype="int" precision="11" attributes="unsigned" phptype="integer" null="false" />
<field key="type" dbtype="varchar" precision="100" phptype="string" null="false" />
<field key="value" dbtype="longtext" phptype="string" null="true" />
<field key="key" dbtype="varchar" precision="255" phptype="string" null="true" />
<field key="xtype" dbtype="varchar" precision="255" phptype="string" null="false" />
<index alias="object_id" name="object_id" primary="false" unique="false" type="BTREE" >
<column key="object_id" length="" collation="A" null="false" />
</index>
<aggregate alias="Item" class="CatalogmanagerItem" local="object_id" foreign="id" cardinality="one" owner="foreign" />
</object>
Как я могу выбрать все объекты, у которых parentid=0, active=1, delete_object=0 и в таблице catalogmanager_xtype key='alias', value='modx'.
Сейчас я делаю примерно следующее:
$objectArray = array();
$w = array('parentid'=>0, 'active'=>1, 'delete_object'=>0);
$Collection = $this->modx->getCollection('CatalogmanagerItem', $w );
foreach ($Collection as $object) {
$data = $object->toArray();
$fields = $object->getMany('Data');
if ($fields) {
foreach ($fields as $field) {
$data[$field->key] = $field->value;
}
}
if ($data['alias'] == 'modx') $objectArray[] = $data;
}
Но как видно, это совершенно не удобно. Подскажите способ более оптимально сделать это!
Хотелось бы все условия отображать в одном where.
Спасибо!