Задать вопрос
@Artem0071
Безработный mr. Junior

Держаться ООП или тут это излишне?

Я самоучка
Сделал свой костыльный движок и теперь пытаюсь его сделать более ООП'шным

Есть БД:
пользователь(user_id, image_id_avatar)
картинки(image_id, image_src)

Есть класс User:
private $users = [];
    private $user = [];
    private $userID = null;

    public function __construct($userID = null, $user = [], $users = [])
    {
        $this->userID = $userID;
        $this->user = $user;
        $this->users = $users;
    }

    public function findBy($params = [], $multiple = false)
    {
        $Users = App::DB()->select('users', [], $params); //получаю данные из бд

        if (count($Users)){
            if ($multiple){
                $this->users = $Users;
                return $this;
            }

            if (count($Users) > 1)
                return $this;

            $this->user = $Users[0];
            $this->userID = $Users[0]['User_ID'];
            return $this;
        }

        return $this;
    }


    public function refactor($options = [])
    {
        $userDB = $this->user;

        $image = $userDB['Image_ID_Avatar']
            ? STORAGE_DOMAIN .Image::getImageByID($userDB['Image_ID_Avatar'])['Image_Path']
            : null;

        $this->user = [
            'hash' => $userDB['User_Hash'],
            'nickname' => $userDB['User_Nickname'],
            'avatar' => $image
        ];
        return $this;
    }


Image::getImageByID возвращет src картинки:
public static function getImageByID($image_id)
    {
        $Image = App::DB()->select('images', [], ['image_id' => $image_id]); // новый запрос в БД
        return $Image[0];
    }


Все это работает

Но меня смущает следующее:

Если мне нужен не один человек, а допустим 100
В таком случае, если у всех них заданы картинки, то произойдет 100 новых подключений за картинками.

Как это все можно оптимизировать и сохранить некое ООП если оно вообще у меня есть :)
  • Вопрос задан
  • 339 просмотров
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
fomvasss
@fomvasss
PHP developer
Тогда нужно вытащить все 100 пользователей, а потом уже вытащить одним запросом 100 картинок, задав в запросе для картинок массив id-дов вытащенных пользователей.
Или использовать join для обоих таблиц
В двух случаях методы для вытаскивания можно реализовать через ООП, от которого отказываться не нужно
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽