@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
fomvasss
@fomvasss
PHP developer
Тогда нужно вытащить все 100 пользователей, а потом уже вытащить одним запросом 100 картинок, задав в запросе для картинок массив id-дов вытащенных пользователей.
Или использовать join для обоих таблиц
В двух случаях методы для вытаскивания можно реализовать через ООП, от которого отказываться не нужно
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽