oop — лучшая практика для создания JOINS в PHP OO

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

Вещь принадлежать одному группа, это может иметь много предметов.

Предполагая, что шаблон MVC и что каждая таблица имеет свой класс модели с CRUD-методами, написанными на PHP, какова лучшая практика для построения соединения между Вещь а также группа?

  1. Построить SELECT заявление в группа чтобы получить удостоверение личности группа а затем построить простой SELECT заявление, используя полученный идентификатор?

    /* Select by name in database and returns group object with id and name */
    $group = new Group();
    $group->setName('somename');
    $group->selectByname();
    
    
    $item = new Group();
    /* Sets Group object inside Item */
    $item->setGroup($group);
    
    /* Select statement without join, only comparing id */
    /* SELECT FROM Item WHERE group_id = $group->id */
    $item->selectByGroup();
    
  2. …или создать JOIN непосредственно на классе Item?

    /* Sets the name, returning only the name in the Group object */
    $group = new Group();
    $group->setName('somename');
    
    /* Build the JOIN inside Item class */
    $item = new Item();
    $item->setGroup($group);
    
    /* Select statetment with join */
    /* SELECT it.*, gr.* FROM item it INNER JOIN group gr
    ON it.group_id = gr.id
    WHERE gr.name = $group->name
    */
    $item->selectByGroupWithJoin();
    

Некоторые части кода я просто пропустил или упростил, чтобы объяснить мои сомнения.

Так что такое рекомендуемая / лучшая практика? Если не один из них, то какой другой? Благодарю.

-1

Решение

Если я правильно понимаю, в первом случае вам нужно выполнить два запроса, а во втором — только один, поэтому я бы точно выбрал второй.

В любом случае вы всегда можете использовать EXPLAIN получить оценку того, насколько «тяжелым» является ваш запрос и где у вас есть место для оптимизации / улучшения.

-1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector