Как добавить в массив одну копию ms2gallery?

Всем привет. Может кто-нибудь подсказать каким образом заджойнить ms2Gallery, чтобы не создавалось по 3 копии одной и той же записи с разными размерами изображений (small, medium, full), а в массив добавлялись поля (small, medium, full) к одной записи? Так вроде в msProducts сделано. Хотелось узнать возможно ли такое сделать средствами pdoTools?

P.S. Код за катом.

Вот код:

{'!pdoPage' | snippet : [
                            'element' => 'pdoClass',
                            'class' => 'sOneMusicTrack',
                            'loadModels' => 'ms2gallery',
                            'leftJoin' => '{
                                "Image": {
                                    "class": "msResourceFile",
                                    "on": "sOneMusicTrack.docid = Image.resource_id"
                                }
                            }',
                            'select' => '{
                                "sOneMusicTrack": "*",
                                "Image": "Image.url as img"
                            }',
                            'where' => [
                                'docid' => $docid
                            ],
                            'limit' => 100,
                            'tpl' => 'sOneMusicTrack.json'
                        ]}
SEQUEL.ONE
05 июля 2020, 18:07
modx.pro
198
0

Комментарии: 6

Максим
06 июля 2020, 17:26
0
Хз как джоинить. Сам так и не разобрался. Можно конечно подзапросом это получить, но на вашем месте я бы для модели sOneMusicTrack добавил бы связь с галлереей один ко многим и ее бы использовал.
    SEQUEL.ONE
    06 июля 2020, 20:21
    0
    На чистом SQL это можно через GROUP BY и HAVING сделать.
    Николай Савин
    07 июля 2020, 08:09
    +1
    {'!pdoPage' | snippet : [
                'class' => 'sOneMusicTrack',
                'loadModels' => 'ms2gallery',
                'leftJoin' => [
                    "medium" => [
                        "class" => "msProductFile",
                        "alias" => "medium",
                        "on" => "medium.product_id = sOneMusicTrack.docid  AND medium.rank = 0 AND medium.path LIKE '%/medium/%'"
                    ],
                    "small" => [
                        "class" => "msProductFile",
                        "alias" => "small",
                        "on" => "small.product_id = sOneMusicTrack.docid  AND small.rank = 0 AND small.path LIKE '%/small/%'"
                    ],
                    "full" => [
                        "class" => "msProductFile",
                        "alias" => "full",
                        "on" => "full.product_id = sOneMusicTrack.docid  AND full.rank = 0 AND full.path LIKE '%/full/%'"
                    ],
    
                ],
                'select' => [
                    "medium" => "medium.url as medium",
                    "small" => "small.url as small",
                    "full" => "full.url as full",
                    "sOneMusicTrack" => "*",
                ],
                'where' => [
                    'docid' => $docid
                ],
                'limit' => 100,
                 'tpl' => 'sOneMusicTrack.json'
            ]}
      Николай Савин
      07 июля 2020, 08:12
      0
      Скорее всего здесь еще понадобится указать sortby => id
        SEQUEL.ONE
        08 июля 2020, 22:27
        0
        Как лучше всего в условие where на Fenom добавить исключения из выборки все записи с классом msProduct и Ticket? Если добавляю через запятую, почему-то работает только одно условие на поле class_key.
          Максим
          09 июля 2020, 13:02
          +1
          Я вот так писал условие:
          {var $where = ['(`Data`.`available_sizes` > 0 OR `Data`.`available_rows` > 0 OR `Data`.`soon_available` > 0)']}
          Правда в примере OR, но суть не меняется.
          И вот еще из того же проекта:
          {var $where = ['`Data`.`new` != 0 AND (`Data`.`available_sizes` > 0 OR `Data`.`available_rows` > 0)']}
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      6