2015-07-21 3 views
1

Я использую RedBean для создания приложения временной шкалы.RedBean multi table join

Здесь (упрощенно) Структура БД:

Владелец

  • идентификатор
  • имя
  • электронной

Проект

  • ID
  • Описание
  • owner_id

Задача

  • ID
  • Описание
  • project_id

Вход

  • ID
  • начало
  • конец
  • Описание
  • TASK_ID

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

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

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

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

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

Ближайшая вещь, которую я могу найти, - это метод траверса, который означает, что Id рекурсивно входит в каждый компонент, чтобы найти его «дети», но это означает возвращение всего набора результатов и его обработку.

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

ответ

0

Просто, чтобы дать вам представление, вы также можете использовать соединения 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 преобразует результаты в Бина, которые могут быть легко проходимые.

+0

Тип: удалить запятую после «Выбрать L. *». – user2340939