как решить эту задачу правильно на ООП?

Духовность™

Продвинутый новичок
как решить эту задачу правильно на ООП?

Рисунок

На рисунке панель управления статьями. Имеется маппер статей и класс статей - модель.

В панели необходимо реализовать управление выводом статьи в меню (выводить или нет). Для этой задачи решил использовать чекбоксы и соответственно массив вида id_article => bool_var

Меня интересует, как update статей должен реализовываться в случае ОО-архитектуры? Интересует, какой именно слой должен заниматься обновлением?

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

PHP:
$lists = $article_mapper->getObjectsList(....);
идити циклом по этому массиву, присваивать аттрибуту класса модели статьи новое значение и делать save

PHP:
foreach ($lists as $article)
{
   $article->flag = bool_var-from_post;
   $article->save();
}
Но это плохо. Не плохо было бы делать обновление одним запросом. Но как более правильно поступить?.... Какой слой это должен делать? Маппер?:
 

x-yuri

Новичок
а как ты себе представляешь один sql-запрос, который будет выполнять твою задачу? (без учета "ОО-архитектуры")
 

x-yuri

Новичок
тебе же для каждого конкретного id нужно свое значение присвоить
 

Духовность™

Продвинутый новичок
да. для каждого конкретного id либо 1 либо 0

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

PHP:
public function setMenuValues($in)
{
    $true_keys = array_keys($in, 1);  // отмечены (1)
    $false_keys = array_keys($in, 0);  // не отмечены (0)

    $this->db->query('UPDATE `'.$this->db_table_name.'` SET `flag2` = 1 WHERE id IN ('.implode(', ', $true_keys).')');
    $this->db->query('UPDATE `'.$this->db_table_name.'` SET `flag2` = 0 WHERE id IN ('.implode(', ', $false_keys).')');
}
 

x-yuri

Новичок
а, имхо это преждевременная оптимизация. Сколько ты выиграл времени по сравнению с исходным вариантом?
 

Духовность™

Продвинутый новичок
я не реализовывал исходный вариант. но 2 запроса лучше чем 20, верно?

но теряется ОО подход..
 

x-yuri

Новичок
так вот в том то и дело: с одной стороны ОО-подход, с другой - оптимизация. Но кроме всего прочего ты начал оптимизировать, не зная, что ты при этом выиграешь
 

Фанат

oncle terrible
Команда форума
неверно.
не всегда верно, точнее.
иногда 2 запроса не лучше, чем 20
 

HraKK

Мудак
Команда форума
в твоем случае я бы ломал оо подход ради ненужной и спичечной оптимизации
 

x-yuri

Новичок
ну шучу я ;-) по-моему тут пока все предпочитают не оптимизировать, ибо выигрыша в данном случае заметного не будет
 

AmdY

Пью пиво
Команда форума
triumvirat
у тебя оба варианта достаточно ООП-шние. помоему в данном вопросе ты уже сам достаточно разобрался чтобы тебе ещё что-то советовать. поступай как тебе кажется правильнее.
 

x-yuri

Новичок
просто принимая решение, учти, что один из вариантов - это оптимизация, которая не дает заметного эффекта
 
Сверху