ORM битрикс предоставляется уже готовые методы для выборки данных. В документации есть информация как добавить свое поле в SELECT, но нет информации как связать две таблицы. Поэтому разработчики пишут сначала Getlist для одной таблицы, потом, в цикле или через массив одним запросом, выбирают из другой таблицы. Так делать не нужно, когда есть простой JOIN таблиц в самом ORM. К сожалению, в документации про это нет ни слова.
Ниже пример как связать две таблицы — выбираем все комментарий из сделки
b_crm_timeline
, также ФИО их автора из таблицы b_user
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$result = TimelineTable::getList( [ 'select' => ['CREATED', 'COMMENT', 'AUTHOR_ID', "NAME" => "USER_TABLE.NAME", "LAST_NAME" => "USER_TABLE.LAST_NAME" ], 'filter' => [ 'TYPE_ID' => TimelineType::COMMENT, 'BINDINGS.ENTITY_ID' => $id ], 'runtime' => [ (new \Bitrix\Main\ORM\Fields\Relations\Reference( 'USER_TABLE', \Bitrix\Main\UserTable::class, \Bitrix\Main\ORM\Query\Join::on('this.AUTHOR_ID', 'ref.ID') )) ->configureJoinType(\Bitrix\Main\ORM\Query\Join::TYPE_INNER) ] ]); |
Все делается через runtime , его также можно использовать, чтобы добавит любое поле в SELECT (об этом упоминается в документации), но также можно использовать для связки двух таблиц.
this.AUTHOR_ID ссылка на левую таблицу, то есть b_crm_timeline
· Permalink
Спасибо!