Ошибка "Field is not presented in selected object types"
Актуально для версии 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>