Для получения как списка, так и элемента по ID — всегда используется Blender объект. Для тестирования, создадим 2 категории.
Полю «Тип новости» выставим тип — «категория». И установим у него в настройках категорию news_type. В итоге у нас будет 2 категории, одна связана с другой. Для получения полного списка, воспользуемся таким запросом:
Обратите внимание на метод joinType() . Так как в категории мы создали поле с кодом type и привязкой к другой категории — в блендере появился подобный метод, который позволяет при запросе к БД за одно получить и данные из смежной категории. Шаблон таких полей всегда такой: join[camlecase код свойства]. Если бы свойство называлось super_type, то метод бы назывался: joinSuperType().
Для получения всех созданных нами свойств из модели нужно использовать методы get[camelcase код свойства]Value. Например:
Для получения связанной, другой модели, нужно использовать методы get[camelcase код свойства]Model. Например:
Для получения сырого массива данных, а так же ключей для фильтрации, которые можно использовать в addWhere методе нужно использовать метод getRawData. Он доступен как для модели, так и для списка.
В ответе будет подобный массив:
Array ( [0] => Array ( [name] => Тест новость [date] => 2024-04-12 00:00:00 [photo] => /upload/dynamic/2024-04/01/cats-pyramyd-00fcb056-eddb6021.jpg [type] => 1 [id] => 1 [created_by] => 1 [modified_by] => 1 [created_time] => 2024-04-01 07:32:41 [modified_time] => 2024-04-01 07:32:41 [photo__width] => 1024 [photo__height] => 1024 [photo__size] => 305159 [photo__description] => [type_name] => Новость [type_id] => 1 [type_created_by] => 1 [type_modified_by] => 1 [type_created_time] => 2024-04-01 07:31:27 [type_modified_time] => 2024-04-01 07:31:27 ) )
Все свойства, что возвращаются в данном массиве, можно использовать в сортировке (addWhere) и группировке (addGroup).
Добавим к в нашей категории свойство:
Модернизируем наш код для получения галереи.
Обратите внимание на пару особенностей. Во первых для получения множественных свойств мы не должны вызывать метод joinGallery у NewsItemBlender, так как получение множественных свойств выполняется отдельным запросом к БД. Во вторых, мы вызываем метод getGallery внутри цикла и можно подумать, что если у нас будет 200 новостей, то мы выполним дополнительно 200 запросов. Это не так, при вызове getGallery — будет автоматически получены все галереи на весь список, что вернул NewsItemBlender при повторном вызове getGallery, данные будут браться из кеша. Бывают редкие случаи, когда нам нужно получить список множественных свойств, независимо от главного элемента, для этого используем автоматически-созданную категорию.
Если у множественного свойства код — gallery, и главная категория имеет код news_item, категория для множественного свойства будет иметь код news_item_gallery и название объекта NewsItemGallery. То есть для получения значений мы используем обычную конструкцию для получения значений из любой галереи:
Для фильтра по множественным свойства нам необходимо присоединить таблицу с множественными свойствами к запросу данных из БД. Для этого используем метод join[camelcase код множественного свойства]. Имейте ввиду, что при соединении основной таблицы с таблицей множественных свойств, результирующие данные будут дублироваться. Для того, чтоб этого не было - используйте метод addGroup("id").