medveddev / bxorm

24 stars 10 forks source link

не правильно работает выборка с whereNot по множественному свойству #12

Closed toxaw closed 3 years ago

toxaw commented 4 years ago

Допустим нам надо выбрать элементы у которых есть ид тегов(мнж. свойство), так чтобы в выборку попали те элементы которые не имеют привязку в определённому тегу(тегам) Пример: $iblock = \Bitrix\Iblock\Iblock::wakeUp(2); $ids = [1,3,5,7,8];// к примеру $elements = $iblock->getEntityDataClass():: ->addSelect('*') ->whereNot('MULTI_IDS, $ids) // к примеру , такая же басня с whereNotIn('MULTI_IDS, $ids) ->fetchCollection(); . Данная выборка не хочет работать должным образом. Если это было не мнж свойство, то работает. с мнж свойством, выбирает всех, так не должно быть. Подравьте меня, если я не правильно используя логику в построении запроса. P.s. addFilter и setFilter тоже не прокатит.

Vampiref92 commented 4 years ago

Если есть другие теги в этих лементах то что их выберет это логично, потому что та таблица с множеством записей тут нужно по другому. либо 2 запроса 1) Получаем все ID где есть эти теги 2) исключаем эти ID либо с подзапросом - но тут надо проверить что будет быстрее отрабатывать в вашем случае.

toxaw commented 4 years ago

В принципе с доп запросом это проблема решается, где далее в качестве фильтра потом перечисляем id элементов, которые исключать из выборки. Я просто надеялся что построитель запроса сможет справиться с этим и построить один запрос на уровне sql

medveddev commented 3 years ago

построитель запросов достаточно прямолинеен и строит то, о чем его попросили. в вашем лучше сначала на голом SQL представить решение - с (not exists) в фильтре или двумя запросами - и потом уже реализовывать это в построителе.