@z0091

Как сделать выборку с условием where при composite связи в modx revo?

Всем привет!

Возник вопрос по 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.

Спасибо!
  • Вопрос задан
  • 2928 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы