abstract class DatabaseModel {
....
public function select()
{
$this->query_string = htmlspecialchars("SELECT * FROM ".$this->tableName);
}
public function find($id)
{
return $this->where('id',$id)->get();
}
// Следует еще использовать магию для этого метода, чтобы была возможность вызывать его статически
// но это тоже опустим
public function where($column, $value, $condition = "=")
{
$this->query_string .= htmlspecialchars($this->select() . "WHERE " . $this->tableName.".".$column .
$condition . $value);
}
public function update(...) {...}
public function delete(...) {...}
...
public function get()
{
// сейчас возвращаем массив, но нужно в реальном решении возвращать эту же модель,
// но где уже все свойства заполнены данными из БД, опущу этот процесс для простоты.
// Если действительно хотите реализовать это - используйте для удобство магию (сеттеры),
// чтобы доступ к свойствам был удобен и они были динамическими
return PDO::exec($this->query_string)->fetchAll();
}
....
}
class Users extends DatabaseModel {
...
public function getById($id)
{
// Этот метод нам вообще не нужен теперь, пользователя можно будет просто получить.
// При реализации нормальной get() - получим модель Users конкретного пользователя
}
public function rating()
{
// Возвращает модель рейтинга данного пользователя
return Rating::where('user_id', $this->id)->get();
}
...
}
// При нашей самопальной реализации это будет жрать 3 запроса: 1)поиск user 2) поиск rating 3) update
User::find(123)->rating()->update(['rating'=>200]);
//также и в обратную сторону, но это будет жрать 1 запрос 1)поиск rating и update
Rating::where('user_id',123)->update(['rating'=>200]);
php artisan config:clear
php artisan migrate --env=testing
?