Взаимодействие с базой данных в Yii

В этой статье попробуем наладить соединение с базой данных. Получим сохранённые там данные и выведем их в представление.

Тестовая таблица

Сначала создадим тестовую таблицу и наполним её данными. Для этого зайдём в 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, пожалуйста, напишите нам в техническую поддержку. Обязательно поможем.

Создание модели

В 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, чтобы протестировать список: Получение списка элементов из базы данных в фреймворке Yii Кликните на цифру "2" постраничной навигации под списком, чтобы увидеть вторую страницу: Вторая страница списка элементов из базы данных в фреймворке Yii
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Cмотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб

⇡ наверх