Объединение нескольких таблиц RedBean

Я использую RedBean для создания приложения табеля учета рабочего времени.

Вот (упрощенная) структура БД:

Владелец

  • id
  • имя
  • Эл. адрес

Проект

  • id
  • описание
  • owner_id

Задача

  • id
  • описание
  • project_id

Журнал

  • id
  • Начало
  • конец
  • описание
  • идентификатор_задачи

Структура таблицы намного сложнее, чем выше, но этого должно быть достаточно, чтобы продемонстрировать мою проблему.

В задаче сотни элементов журнала, а в проекте сотни задач.

Итак, если бы я хотел получить все элементы журнала для конкретного владельца, а также получить связанные задачи и проекты, как бы я этого добился?

Использование SQL-запроса для получения данных достаточно прямолинейно, я могу выбрать, какие данные мне нужны и т. д., но если я изменю данные, мне нужно создать из них bean-компоненты. Поскольку некоторые таблицы имеют похожие имена столбцов, RedBean не будет (или, кажется, не волшебным образом) преобразовывать данные в bean-компоненты.

Итак, я думаю, мой вопрос заключается в том, как создать запрос RedBean, получить, получить все, выбрать, загрузить и т. Д., Который будет преобразовывать данные, которые он использует для каждого соединения, в bean-компонент?

Самое близкое, что я могу найти, - это метод traverse, который означает, что Id рекурсивно входит в каждый компонент, чтобы найти его дочерние элементы, но это означает возврат всего набора результатов и его обработку.

Если самый быстрый способ - просто запустить SQL-запрос и выполнить итерацию по данным и создать из них bean-компоненты, никаких проблем. Я уже делаю это, я просто хотел немного более абстрактный способ сделать это и подумал, что RedBean может предложить эту функциональность.


person Tom Shaw    schedule 21.07.2015    source источник


Ответы (1)


Просто чтобы дать вам представление, вы также можете использовать соединения mySQL, чтобы правильно получить то, что вам нужно, используя R::getAll();, например.

$result = getAll("SELECT L.* FROM logs L, tasks T, projects P, owner O 
    WHERE 
        L.task_id = T.id AND
        T.project_id = P.id AND
        P.owner_id = O.id");

$myResult = R::convertToBeans('myResult', $result); 

R::convertToBeans преобразует результаты в Bean, который можно легко пройти.

person Ashish Nayyar    schedule 13.06.2016
comment
Введите: удалите запятую после Select L.*. - person user2340939; 29.12.2017