# Модели в MVC на PHP

Давайте теперь разберемся с моделями. Модели также, как и контроллеры, представляют собой ООП классы. Их следует размещать в папке `/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`, заполните ее данными. Проверьте работу кода, описанного в теории.

←→
↑