Я использую Kohana в течение нескольких недель. Одна вещь, которую я заметил, это то, что Кохане не хватает загруженной загрузки (насколько я знаю). Скажем, у меня есть следующие таблицы.Как запросить это с помощью ORM?
Предметы
id
name
Главы
id
subject_id
name
Видео
id
chapter_id
name
Когда пользователь открывает су bject, я хочу отобразить все главы и видео. С ORM, я могу сделать
$tutorials = ORM::factory('subject')->where('id','=', 1)->find();
foreach($tutorials as $tutorial)
{
$chapters = $tutorial->chapters->find_all();
foreach($chapters as $chapter)
{
$videos = $chapter->videos->find_all();
}
}
Приведенный выше код неэффективен, так как он вызывает слишком много запросов.
Я думал об использовании присоединиться или базы данных построитель запросов, но оба они не возвращают объект модели, как и их результаты. Я также изучил с(), но похоже, что он работает только с отношениями «один к одному».
Использование объединения объекта ORM возвращает объект OPM, но он не возвращает данные из таблиц соединения.
Какой был бы мой лучший вариант здесь? Я хотел бы свести к минимуму количество запросов, а также получить объекты ORM в результате. Как бы то ни было, нужно вернуть все столбцы из учебников, глав и видео.
Вы видели [Kohana_Database_Query_Builder :: as_object()] (http://kohanaframework.org/3.3/guide-api/Kohana_Database_Query_Builder # as_object)? – Darsstar
@Darsstar // проблема as_object заключается в том, что он принимает только одно имя класса. Что делать, если у меня есть запрос, который возвращает данные из нескольких таблиц, присоединяя их? Это главная проблема, с которой я сталкиваюсь. – Moon
Прошло много времени с тех пор, как я работал с ORM. Но кажется, что двоеточие (':') имеет особое значение в именах выбранных столбцов: http://kohanaframework.org/3.3/guide-api/ORM#_load_values – Darsstar