Задать вопрос
@Snatch87
Битриксоид по принуждению

Битрикс ORM: получить одну из записей связанной таблицы?

Всем привет.
Что-то не получается у меня сделать немного не стандартный запрос через ORM. прошу помощи

Например, есть таблица заказов b_order (OrderTable)
B есть таблица логов, например, logs (LogTable)

В таблице logs может быть много записей по каждому заказу, а так же может не быть записей

Мне нужно получить список заказов с привязкой к последней записи таблицы logs (если такая имеется)

$query = OrderTable::query()

   ->registerRuntimeField('LOG', array(
        'data_type'=> LogTable::class,
        'reference' => [
            '=this.ID' => 'ref.ORDER_ID',
            
        ]
    ))
;

В таком виде мы получим все записи связанной таблицы для имеющихся заказов

Для случаем, когда мы знаем, что для каждого заказа есть запись в логе, можно сделать так:

->registerRuntimeField('LAST_LOG_ENTITY', [
    'data_type'=>'integer',
    'expression' => ['MAX(%s)', 'LOG.ID']
])
->where('LAST_LOG_ENTITY', '!=', false)


В таком случае отсеятся все заказы для которых нет записи в логах

Я перепробовал различные комбинации запроса, писать все варианты - не вижу смысла, поэтому описал базовый вариант.

Очень прошу помощи!
  • Вопрос задан
  • 661 просмотр
Подписаться 2 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 2
@Kontrael
А варианта с двумя запросами вы не рассматриваете.?
Выбираете заказы, собираете айдишники, выбираете логи с максимальными ID, привязанные к собранным заказам. Если в logs есть индекс по ORDER_ID, то запрос будет очень быстрым.
Ответ написан
babarun
@babarun Куратор тега 1С-Битрикс
Безумный план моих идей в руках больных людей
Попробуйте использовать сложную логику "LOGIC"=>"OR" с флагом для устранения дублей
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы