Структура таблицы местоположений 2.0 в Bitrix

Наткнулся на статью Получение местоположений через API Битрикс c поиском по select. . Там есть код

\Bitrix\Main\Loader::includeModule('sale');
$res = \Bitrix\Sale\Location\LocationTable::getList(array(
    'filter' => array('=NAME.LANGUAGE_ID' => LANGUAGE_ID, 'TYPE_CODE' => 'CITY'),
    'select' => array('*', 'NAME_RU' => 'NAME.NAME', 'TYPE_CODE' => 'TYPE.CODE')
));
while($item = $res->fetch())
{
    echo '';
    print_r($item['NAME_RU']);
    echo '';
}

В связи со строкой

$res = \Bitrix\Sale\Location\LocationTable::getList(array(
    'filter' => array('=NAME.LANGUAGE_ID' => LANGUAGE_ID, 'TYPE_CODE' => 'CITY'),
    'select' => array('*', 'NAME_RU' => 'NAME.NAME', 'TYPE_CODE' => 'TYPE.CODE')
));

возникли следующие вопросы:

  1. Какова структура класса \Bitrix\Sale\Location\LocationTable (перечислите все его поля)? (Что означают '=NAME.LANGUAGE_ID' => LANGUAGE_ID, 'TYPE_CODE' => 'CITY' и '*', 'NAME_RU' => 'NAME.NAME', 'TYPE_CODE' => 'TYPE.CODE'?)

    Я искал в гугле \Bitrix\Sale\Location\LocationTable. Нашел LocationTable, но там не указаны свойства класса, в частности '=NAME.LANGUAGE_ID' => LANGUAGE_ID, 'TYPE_CODE' => 'CITY' и '*', 'NAME_RU' => 'NAME.NAME', 'TYPE_CODE' => 'TYPE.CODE'. Приведите страницы документации по этому вопросу.

  2. Что означает знак = в записи '=NAME.LANGUAGE_ID' => LANGUAGE_ID?


Ответы (1 шт):

Автор решения: Виктор Карев
  1. Структура: https://bxapi.ru/src/?module_id=sale&name=LocationTable::getMap, там перечислены все поля и ссылки.

Поле NAME является ссылкой (JOIN) на другую таблицу, типа Bitrix\Sale\Location\Name\Location, она описана в классе Bitrix\Sale\Location\Name\LocationTable. Аналогично определено и поле TYPE.

В фильтре '=NAME.LANGUAGE_ID' => LANGUAGE_ID означает, что значение поля LANGUAGE_ID связанной таблицы должно быть равно текущей константе LANGUAGE_ID - текущему языку.

'TYPE_CODE' => 'CITY' - здесь TYPE_CODE определено в 'select' и является алиасом для TYPE.CODE, поля CODE другой связанной таблицы TYPE. Это поле должно быть равно значению 'CITY'.

'*' - выбираем все поля из основной таблицы, 'NAME_RU' => 'NAME.NAME' - из таблицы NAME берём поле NAME под алиасом NAME_RU, 'TYPE_CODE' => 'TYPE.CODE' - из таблицы TYPE берём поле CODE под алиасом TYPE_CODE.

  1. знак = означает, что используется точное сравнение строк (по умолчанию для полей типа строка используется LIKE).
→ Ссылка