shopOrdersCollection

Доброго времени суток.

Собственно вопрос:

формирую коллекцию заказов

$z = new shopOrdersCollection('search/state_id=new&items.type=product&items.stock_id=1');

смотрю сформированный запрос

FROM shop_order o 
JOIN shop_order_items soi1 ON o.id = soi1.order_id 
JOIN shop_order_items soi2 ON o.id = soi2.order_id 
WHERE o.state_id = \'new\' AND soi1.type = \'product\' AND soi2.stock_id = \'1\' ORDER BY o.create_datetime DESC, o.id

Это нормально, что таблица items джойнится два раза?

Скажу честно, не раскапывал сам класс коллекций, но, ИМХО, это не очень гуд. У меня у клиента в таблицу items добавлено еще некоторое кол-во полей и иногда надо делать выборку по 3-4 полям (возможен вариант и больше) .... и это что, будет столько раз джойниться одна и та же таблица? =))

1 ответ

  • 2
    waResearchLab 20 февраля 2017 20:12 #

    Сейчас не посмотреть, но если правильно помню, то джойнится она столько раз, сколько ей where добавляют. В данном случае можно попробовать просто сформировать коллекцию по state_id, а потом сказать ей where(и тут указать оба условия по item). В этом случае, по-моему, джойниться будет один раз.

    • +1
      waResearchLab waResearchLab 20 февраля 2017 20:23 #

      т.е. не where, а addJoin конечно же

    • +1
      BNP (Дмитрий) BNP (Дмитрий) 20 февраля 2017 20:36 #

      С addJoin я делал изначально, просто потом увидел, что можно сразу в hash пихать нужное, но не думал, что будет такой косяк =( А это, ИМХО, косяк, потому что в выборку строки попадают именно столько раз, сколько джоинтов прошло =(

      • +1
        Алексей Алексей Webasyst 20 февраля 2017 21:14 #

        Т.е. вам потом $z->getProducts('*') даёт повторные строки?

        • +1
          BNP (Дмитрий) BNP (Дмитрий) 20 февраля 2017 23:28 #

          Если честно, мне getOrders() (коллекция таки заказов, а не товаров) не особо и нужен. Мне нужны именно итемы из таблицы shop_order_items. При помощи механизма коллекций я пытался собирать нужные мне SQL запросы, что бы не писать их самому =))

          Наверное стоит забрать свои слова насчет косяка назад и назвать это фичей, но интереснее от этого не становится =(

          Получить 74 строки, вместо ожидаемых 4 нужных, не очень айс =)

          • +1
            Алексей Алексей Webasyst 20 февраля 2017 23:47 #

            Что вам именно нужно получить? А то может проще взять sql и через модель получить нужные значения.

            • +1
              BNP (Дмитрий) BNP (Дмитрий) 21 февраля 2017 00:08 #

              Определенные позиции из таблицы shop_order_items, которые отвечают следующим условиям:

              1. Заказы в определенных статусах

              2. Задаем условия по определенным полям позиций (не системным, а добавленным).

              Так собственно я изначально и делал через sql. Потом решил, что проще и легче использовать коллекции. Сначала решил через addJoin, потом увидел, что можно в hash пихать запросы, думал, что совсем все просто будет, ан нет =(

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите