Ошибка "Field is not presented in selected object types"

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 18

Иногда при составлении выборок с помощью selector возникает ошибка "Field is not presented in selected object types", хотя данное поле присутствует у обьектов. Такая ошибка может возникать из-за того, что в разное время были внесены изменения в типы данных, по которым делается выборка, или были изменения в иерархии типах данных. Из-за этого, подобный код для выборки по полю "data_razmeweniya" среди всех объектов не работает:

$sel = new selector('pages');
$sel->types('hierarchy-type')->name('catalog', 'object');
$sel->order('data_razmeweniya')->desc();

Хотя поле "data_razmeweniya" присутствует. Примерная структура:

*Каталог
   *Подкаталог_1
      *Объект_1 
   *Подкаталог_2
      *Объект_2
   *Подкаталог_3
      *Объект_3

Для решения проблемы Вы можете воспользоваться следующим способом - необходимо сначала выбрать по type id Каталога, чтобы выбрать все, и после этого уже добавить выборку по name('catalog', 'object'), таким образом исключив из выборки подкаталоги. Итоговый код выборки будет следующий:

$sel = new selector('pages');
$sel->types('object-type')->id(125);
$sel->types('hierarchy-type')->name('catalog', 'object');
$sel->order('data_razmeweniya')->desc();

Также приводим пример usel-выборки с явно заданным id типа данных:

<?xml version="1.0" encoding="utf-8"?>
<selection>
    <target result="pages">
        <type id="125" />
        <type module="catalog" method="object" />
    </target>
    <property name="best_offers" value="1" />
    <sort>rand()</sort>
    <limit page="0">{limit}</limit>
</selection>