Задать вопрос
@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 новых подключений за картинками.

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

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

Похожие вопросы