А что вы используете в качестве движка БД? Чистый PDO или какую-то ORM?
class Users extends DBModel {
public function getById(int $id){
// указываем какие поля нам нужны и какие таблицы нужно приджойнить
// на самом деле имеется метод setFields, где я указываю только поля id,login,rating
// А метод уже берет массив, в котором описаны правила, какие названия указанных полей соответствуют реальным в БД
// и какие для этого поля нужно присоеденить таблицу
// поэтому не приходится в каждом методе прописывать $this->join и $this->select,
// а достаточно выполнить $this->setFields("id, login, rating")
$this->select("u.`id`, u.`login`, r.`rating`");
$this->join("LEFT JOIN `users_rating` r ON r.`user_id` = u.`id`");
$this->where("`id` = {$id}");
//Возвращаем уже готовый объект
return $this->createObject($this->exec());
}
/**
* Метод создает объект пользователя на основе полученных из БД полей
* @param $row
* @return UserEntity
*/
private function createObject($row){
$object = new UserEntity;
if($this->isField("id")) $object->setId($row['id']);
if($this->isField("login")) $object->setLogin($row['login']);
//... и так для всех возможных полей
// Да, если я добавлю поле в таблицу, мне нужно его будет прописать
// тут, создать метод в UserEntity и создать правило для setFields.
return $object;
}
public function get(){
// Получение списка пользователей
}
public function getByIds(array $ids){
// получение пользователей по ID
}
public function search(string $q){
// поиск по пользователям
}
}