Тестовая таблица
Сначала создадим тестовую таблицу и наполним её данными. Для этого зайдём в SQL консоль и выполним такой запрос:CREATE TABLE `animals` (
`name` VARCHAR(20) NOT NULL PRIMARY KEY,
`food` VARCHAR(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
В созданной таблице будут содержаться данные: названия животных и их любимая еда. Добавим в эту таблицу тестовые данные:
INSERT INTO `animals` VALUES ('Мышь', 'Сыр');
INSERT INTO `animals` VALUES ('Кот', 'Молоко');
INSERT INTO `animals` VALUES ('Лошадь', 'Сено');
INSERT INTO `animals` VALUES ('Крокодил', 'Мясо');
INSERT INTO `animals` VALUES ('Поросёнок', 'Желуди');
INSERT INTO `animals` VALUES ('Курица', 'Зерно');
INSERT INTO `animals` VALUES ('Птица', 'Червяки');
INSERT INTO `animals` VALUES ('Корова', 'Трава');
Далее будем делать запрос к этой таблице и выводить поля из неё.
Подключение к базе данных
Чтобы Yii начал взаимодействовать с базой данных, необходимо прописать ему в конфигурационном файлеconfig/db.php
.
<?php
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=название_базы',
'username' => '', // имя пользователя
'password' => '', // пароль пользователя
'charset' => 'utf8',
];
В этом коде необходимо заменить "название_базы" на название базы данных, с которой происходит соединение. Далее вставить нужное имя пользователя и пароль.
Обязательно включите расширение PDO в настройках PHP для используемой базы данных. Расширение может называться "pdo_mysql". Это необходимое требование для работы с базой данных MySQL.
Если возникли сложности с включением расширения PDO, пожалуйста, напишите нам в техническую поддержку. Обязательно поможем.
Если возникли сложности с включением расширения PDO, пожалуйста, напишите нам в техническую поддержку. Обязательно поможем.
Создание модели
В Yii для получения данных из базы используется класс "Active Record". Чтобы получить свои данные из определённой таблицы, необходимо создать потомка этого класса. Обратите внимание, что писать подробный код для связи не нужно. Достаточно лишь создать потомка с названием, равным названию таблицы (не учитывая регистр). В нашем случае мы создадим файл по адресуmodels/Animals.php
и запишем в него следующий код
<?php
namespace app\models;
use yii\db\ActiveRecord;
class Animals extends ActiveRecord {
}
Этого кода достаточно, чтобы вазимодействовать с таблицей. Фреймворк поймёт по названию класса с какой таблицей мы запрашиваем действие. Теперь чтобы работать с запросами к таблице нам потребуется несколько методов (чтение всех/одного и изменение):
// необходимо загрузить класс перед использованием
use app\models\Animals;
// получить все записи таблицы "animals" с сортировкой по полю "name"
$animals = Animals::find()->orderBy('name')->all();
// поиск строки по значения первичного ключа "Мышь"
$animal = Country::findOne('Мышь');
// вывод навзания и любимой еды:
echo $animal->name;
echo $animal->food;
// внесение изменений в базу данных:
echo $animal->food = 'Молоко';
echo $animal->save();
Создание действия
Действие будет возвращать представление, в которое будут передаваться данные по полученному из базы данных списку и постраничной навигации. Для начала сделаем новый файл контроллера по адресуcontrollers/AnimalsController.php
. При этом в начале файла необходимо указать подключение модели "Animals", которую создали ранее, а затем сделать действие "actionList", чтобы список животных показывался на титульной странице сайта:
<?php
namespace app\controllers;
use yii\web\Controller;
use yii\data\Pagination;
use app\models\Animals;
class AnimalsController extends Controller {
public function actionList() {
$query = Animals::find();
$pagination = new Pagination([
'defaultPageSize' => 5, // количество записей на странице
'totalCount' => $query->count(), // количество записей в таблице
]);
$animals = $query->orderBy('name')
->offset($pagination->offset) // отступ постраничной навигации
->limit($pagination->limit) // ограничение размера выборки
->all();
return $this->render('list', [
'animals' => $animals,
'pagination' => $pagination,
]);
}
}
Теперь создадим представление "animals-list", в которое будет передаваться полученный список.
Представление
Для представления необходимо сделать файлviews/animals/list.php
. В нём будет выводиться список с постраничной навигацией. Код в этом файле будет выглядеть так:
<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
?>
<h1>Животные</h1>
<ul>
<?php foreach ($animals as $animal): ?>
<li>
<?= Html::encode($animal->name) ?>
(любимая еда: <?= Html::encode($animal->food) ?>)
</li>
<?php endforeach; ?>
</ul>
<?= LinkPager::widget(['pagination' => $pagination]) ?>
Теперь можно перейти на страницу /index.php?r=animals/list
, чтобы протестировать список:
Кликните на цифру "2" постраничной навигации под списком, чтобы увидеть вторую страницу: