Подсоединяем не объявленную таблицу в Propel или Join Custom Table Propel / ~#root -i Подсоединяем не объявленную таблицу в Propel или Join Custom Table Propel / ~#root -i Подсоединяем не объявленную таблицу в Propel или Join Custom Table Propel / ~#root -i Подсоединяем не объявленную таблицу в Propel или Join Custom Table Propel / ~#root -i Подсоединяем не объявленную таблицу в Propel или Join Custom Table Propel / ~#root -i Подсоединяем не объявленную таблицу в Propel или Join Custom Table Propel / ~#root -i Подсоединяем не объявленную таблицу в Propel или Join Custom Table Propel / ~#root -i Подсоединяем не объявленную таблицу в Propel или Join Custom Table Propel / ~#root -i
  • Создать интернет-магазин
  • Документация
  • Блог
    • Unix-подобные ОС
    • Php
    • MySQL
    • JavaScript
    • Менеджеры пакетов
    • Docker
    • Seo
  • Короткие ссылки
  • Вход
  • Регистрация
  • Главная
  • Php
  • Подсоединяем не объявленную таблицу в Propel или Join Custom Table Propel

Подсоединяем не объявленную таблицу в Propel или Join Custom Table Propel

На днях передо мной стала задача отсортировать выдачу продуктов по таблице, которая не описана в schema.xml. Приведу краткий пример схемы таблицы и структуры таблицы с позициями, по которой мне следовало отсортировать товары.

Упрощенная таблица товаров (объединил таблицу переводов с основной и урезал поля):

id (int) id товара
name (string) Имя
create_date (int) Дата

Схема этой таблицы (schema.xml):

<table name="shop_products" phpName="SProducts">
        <vendor type="mysql">
            <parameter name="Charset" value="utf8"/>
        </vendor>

        <column name="id" type="INTEGER" required="true" autoIncrement="true" primaryKey="true"/>        
        <column name="name" type="varchar" size="500" required="true"/>
        <column name="create_date" type="INTEGER"/>        
</table>

Дорпустим у нас есть привязка товаров к статьям, и у каждой статьи может встречаться один и тот же товар и у каждого товара может быть своя позиция в каждой статье.

Приведу пример таблицы статей и связи товаров (назовем таблицу link_page):

page_id (int) Id статьи (приведено для примера)
product_id (int) Id товара со схемы SProducts
position (int) Позиция в которой товар есть в статье

Вот есть позиция у каждого товара в статье, но в таблице товара нет связки, чтобы сделать join пропелом. По этому начинаем делать вот так:

SProductsQuery::create()                            
   ->addJoin('shop_products.id' , 'link_page.product_id', Criteria::INNER_JOIN)
   ->addAsColumn('position', 'link_page.position')
   ->where('page_link_product.page_id = ' . 'ID страницы товара')                            
   ->orderBy('position','ASC')                      
    ->find();

В моем случае полный путь к Criteria::INNER_JOIN является \Propel\Runtime\ActiveQuery\Criteria::INNER_JOIN.

SProductsQuery - сгенерированная модель по схеме, упрощенная для понимания и описанная выше.

Данный запрос даст возможность подключить не объявленную в моделях таблица в пропел запрос, чтобы не делать костылей и велосипедов для сортировки.

Пробуйте, разбирайтесь, в моем случае addJoin() позволил сэкономить время переписи и перегенерации схемы под нужды, тем самым не сильно отягощая страницу статьи, на которой присутствуют товары.

root-i
21 Мая 18
565
0
Теги
Php 5.6 Propel ORM
Поделиться

Комментарии

Имя
Электронная почта
Рейтинг
Отзыв

Похожие посты

18 Июля 2018

Группировка условий в запросе ORM Propel (condition, combine)

Разберем возможность объединения условий в запросе по группам в Propel. Рассмотрим пример фильтрации по полям с помощью ->condition() и ->combine().

03 Июня 2018

Установка Propel в наш проект через Composer

Подтянем в наш проект ORM Propel2 с помощью Composer. Рассмотрим смежные пакеты, которые нужны для Propel2.

17 Мая 2018

Что такое MVC или с чего начать писать сайт?

Рассмотрим вариант создания простого проекта с MVС, который будет откликаться статическую ссылку в браузере, без управления $_GET параметрами. Ссылка будет разбиваться на путь к файлам и задействовать нужные контроллер, модель и view файл.

19 Мая 2018

Фоновый процесс очереди в Php с Gearman

Иногда возникает нужда использовать фоновый процессы на Php. Рассмотрим пример использования такой возможности в связке Gearman + Php.

19 Мая 2018

Worker Gearman с консоли Cli на Php

Для нормальной работы воркера Gearman требуется постоянная его работа в зацикленном режиме. Со стороны сервера это можно реализовать одним запросом через консоль Cli. Рассмотрим роботу на простом примере.

01 Июня 2018

Подключение библиотек Composer на Php сайт

Разобравшись что такое Compser и для чего он нужен, следует разобраться как его использовать на сайте. В статье рассмотрим подключение библиотек подтянутых через Composer.

02 Июня 2018

Docker MySQL 5.7 через docker-compose и использование на Ubuntu 14.04

Установка MySQL 5.7 через Docker. Все действия будем производить на Ubuntu 14.04 c помощью docker-compose. Рассмотрим запуск, схему для compose и примеры подключения к созданному контейнеру MySQL.

31 Октября 2018

Анализ нагруженных частей Php кода с помощью xhprof

После разработки какого-либо инструмента на PHP, становится вопрос, насколько созданный код ресурсный и какие элементы он затрагивает еще. Рассмотрим установку xhprof, настройку и рассмотрим способы работы с xhprof.

Категории

  • Unix-подобные ОС
  • Php
  • MySQL
  • JavaScript
  • Менеджеры пакетов
  • Docker
  • Seo

Теги

Ubuntu 14.04 (15) Софт (11) Gearman (3) Сервисы (2) Framework (1) MVC (1) Php 5.6 (15) Cli (2) Propel (3) ORM (3) JavaScript (5) Css (1) Composer (4) Docker (3) Seo (4) MySQL (5) docker-compose (2) CentOS (1) 1С (1) Memcache (1) Memcached (1) Php 7 (5) Анализ (2) Ubuntu 18.04 (11) MySQL 5.7 (4) Генерация (2) Bower (1) Npm (1) NodeJs (3) Gulp (1) ImageCMS (2) Базы (1) JQuery (1) Сниппет (1)

Последние комментарии

Как вариант это может происходить из-за неизвестно...
root-i
21.01.22
Чтобы убрать ошибку Uncaught TypeError: $ is not a...
wlad2.ru
11.01.22
Спасибо!
Артём
04.09.21
tedy1, можно в index.php включить режим отладки и ...
root-i
18.03.21

Делюсь информацией в которой я требовал помощи и разбираясь затрачивал много времени. Если информация помогла хотя бы одному человеку, значит этот сайт создан не зря.

Благодарность, на продолжение работы сайта:
Контакты

Telegram Viber Mail

Поиск по сайту

  • Вход
  • Регистрация

Сайт работает на chmod -R