Давайте теперь разберемся с моделями. Модели
также, как и контроллеры, представляют собой
ООП классы. Их следует размещать в папке
/project/models/
. Давайте в этой папке
в файле Page.php
сделаем модель Page
отвечающую за данные страниц нашего сайта:
<?php
namespace Project\Models;
use \Core\Model;
class Page extends Model
{
}
?>
Как вы видите, наша модель наследует от класса
\Core\Model
. От этого класса наша
модель наследует защищенные методы findOne
и findMany
. Метод findOne
параметром
принимает SQL запрос и возвращает первую
запись из БД, попавшую в результат запроса.
Метод findMany
также принимает SQL
запрос, но возвращает массив записей.
При этом вам не нужно писать код, устанавливающий
соединение с БД, а также обрабатывать результаты
запроса через mysqli_fetch_assoc
.
Фреймворк делает это за вас. Вам просто нужно
выбрать, ожидаете ли вы от запроса одну запись
из БД или несколько и использовать соответствующую
функцию, получив результатом вменяемый массив,
которым можно просто взять и воспользоваться
дальше.
Попробуем на практике
Пусть в вашей базе данных есть таблица page
с какими-нибудь записями. Давайте сделаем
модель Page
с двумя методами. Первый
метод будет получать одну запись по ее id
,
а второй метод - получать массив записей
из диапазона id
:
<?php
namespace Project\Models;
use \Core\Model;
class Page extends Model
{
public function getById($id)
{
return $this->findOne("SELECT * FROM page WHERE id=$id");
}
public function getByRange($from, $to)
{
return $this->findMany("SELECT * FROM page WHERE id>=$from AND id<=$to");
}
}
?>
Давайте теперь поработаем с нашей моделью в контроллере:
<?php
namespace Project\Controllers;
use \Core\Controller;
use \Project\Models\Page; // подключаем нашу модель
class PageController extends Controller
{
public function test() {
$page = new Page; // создаем объект модели
$data = $page->getById(3); // получим запись с id=3
var_dump($data);
$data = $page->getById(5); // получим запись с id=5
var_dump($data);
$data = $page->getByRange(2, 5); // записи с id от 2 до 5
var_dump($data);
}
}
?>
Создайте в вашей базе данных таблицу page
,
заполните ее данными. Проверьте работу кода,
описанного в теории.