Перейти к содержимому

Как подключить 2бд к сайту yii2 адвансед

  • автор:

Работа с базами данных ¶

Этот раздел расскажет о том, как создать новую страницу, отображающую данные по странам, полученные из таблицы countries базы данных. Для достижения этой цели вам будет необходимо настроить подключение к базе данных, создать класс Active Record, определить action и создать view.

Изучив эту часть, вы научитесь:

  • Настраивать подключение к БД.
  • Определять класс Active Record.
  • Запрашивать данные, используя класс Active Record.
  • Отображать данные во view с использованием пагинации.

Обратите внимание, чтобы усвоить этот раздел, вы должны иметь базовые знания и навыки использования баз данных. В частности, вы должны знать, как создать базу данных и как выполнять SQL запросы, используя клиентские инструменты для работы с БД.

Подготавливаем базу данных ¶

Для начала создайте базу данных под названием yii2basic , из которой вы будете получать данные в вашем приложении. Вы можете создать базу данных SQLite, MySQL, PostgreSQL, MSSQL или Oracle, так как Yii имеет встроенную поддержку для многих баз данных. Для простоты, в дальнейшем описании будет подразумеваться MySQL.

После этого создайте в базе данных таблицу country и добавьте в неё немного демонстрационных данных. Вы можете запустить следующую SQL инструкцию, чтобы сделать это:

На данный момент у вас есть база данных под названием yii2basic и внутри неё таблица country с тремя столбцами, содержащими десять строк данных.

Настраиваем подключение к БД ¶

Перед продолжением убедитесь, что у вас установлены PHP-расширение PDO и драйвер PDO для используемой вами базы данных (например, pdo_mysql для MySQL). Это базовое требование в случае использования вашим приложением реляционной базы данных. После того, как они установлены, откройте файл config/db.php и измените параметры на верные для вашей базы данных. По умолчанию этот файл содержит следующее:

Файл config/db.php — типичный конфигурационный инструмент, базирующийся на файлах. Данный конфигурационный файл определяет параметры, необходимые для создания и инициализации экземпляра yii\db\Connection, через который вы можете делать SQL запросы к подразумеваемой базе данных.

Подключение к БД, настроенное выше, доступно в коде приложения через выражение Yii::$app->db .

Информация: файл config/db.php будет подключен главной конфигурацией приложения config/web.php , описывающей то, как экземпляр приложения должен быть инициализирован. Для детальной информации, пожалуйста, обратитесь к разделу Конфигурации.

Если вам необходимо работать с базами данных, поддержка которых не включена непосредственно в фреймворк, стоит обратить внимание на следующие расширения:

Создаём потомка Active Record ¶

Чтобы представлять и получать данные из таблицы country , создайте класс — потомок Active Record, под названием Country и сохраните его в файле models/Country.php .

Класс Country наследуется от yii\db\ActiveRecord. Вам не нужно писать ни строчки кода внутри него! С кодом, приведённым выше, Yii свяжет имя таблицы с именем класса.

Информация: Если нет возможности задать прямую зависимость между именем таблицы и именем класса, вы можете переопределить метод yii\db\ActiveRecord::tableName(), чтобы явно задать имя связанной таблицы.

Используя класс Country , вы можете легко манипулировать данными в таблице country , как показано в этих фрагментах:

Информация: Active Record — мощный способ доступа и манипулирования данными БД в объектно-ориентированном стиле. Вы можете найти подробную информацию в разделе Active Record. В качестве альтернативы, вы также можете взаимодействовать с базой данных, используя более низкоуровневый способ доступа, называемый Data Access Objects.

Создаём Action ¶

Для того, чтобы показать данные по странам конечным пользователям, вам надо создать новый action. Вместо размещения нового action’a в контроллере site , как вы делали в предыдущих разделах, будет иметь больше смысла создать новый контроллер специально для всех действий, относящихся к данным по странам. Назовите новый контроллер CountryController , и создайте action index внутри него, как показано ниже.

Сохраните код выше в файле controllers/CountryController.php .

Action index вызывает Country::find() . Данный метод Active Record строит запрос к БД и извлекает все данные из таблицы country . Чтобы ограничить количество стран, возвращаемых каждым запросом, запрос разбивается на страницы с помощью объекта yii\data\Pagination. Объект Pagination служит двум целям:

  • Устанавливает пункты offset и limit для SQL инструкции, представленной запросом, чтобы она возвращала только одну страницу данных за раз (в нашем случае максимум 5 строк на страницу).
  • Он используется во view для отображения пагинатора, состоящего из набора кнопок с номерами страниц, это будет разъяснено в следующем подразделе.

В конце кода action index выводит view с именем index , и передаёт в него данные по странам вместе c информацией о пагинации.

Создаём View ¶

Первым делом создайте поддиректорию с именем country внутри директории views . Эта папка будет использоваться для хранения всех view, выводимых контроллером country . Внутри директории views/country создайте файл с именем index.php , содержащий следующий код:

View имеет 2 части относительно отображения данных по странам. В первой части предоставленные данные по странам выводятся как неупорядоченный HTML-список. Во второй части выводится виджет yii\widgets\LinkPager, используя информацию о пагинации, переданную из action во view. Виджет LinkPager отображает набор постраничных кнопок. Клик по любой из них обновит данные по странам в соответствующей странице.

Испытываем в действии ¶

Чтобы увидеть, как работает весь вышеприведённый код, перейдите по следующей ссылке в своём браузере:

Список Стран

В начале вы увидите страницу, показывающую пять стран. Под странами вы увидите пагинатор с четырьмя кнопками. Если вы кликните по кнопке «2», то увидите страницу, отображающую другие пять стран из базы данных: вторая страница записей. Посмотрев внимательней, вы увидите, что URL в браузере тоже сменилось на

За кадром Pagination предоставляет всю необходимую функциональность для постраничной разбивки набора данных:

  • В начале Pagination показывает первую страницу, которая отражает SELECT запрос стран с параметрами LIMIT 5 OFFSET 0 . Как результат, первые пять стран будут получены и отображены.
  • Виджет LinkPager выводит кнопки страниц используя URL’ы, созданные Pagination. Эти URL’ы будут содержать параметр запроса page , который представляет различные номера страниц.
  • Если вы кликните по кнопке «2», сработает и обработается новый запрос для маршрута country/index . Таким образом новый запрос стран будет иметь параметры LIMIT 5 OFFSET 5 и вернет следующие пять стран для отображения.

Заключение ¶

В этом разделе вы научились работать с базой данных. Также вы научились получать и отображать данные с постраничной разбивкой с помощью yii\data\Pagination и yii\widgets\LinkPager.

В следующем разделе вы научитесь использовать мощный инструмент генерации кода, называемый Gii, чтобы с его помощью быстро осуществлять некоторые часто используемые функции, такие как операции Create-Read-Update-Delete (CRUD) для работы с данными в таблице базы данных. На самом деле код, который вы только что написали, в Yii может быть полностью сгенерирован автоматически с использованием Gii.

Работа с несколькими БД Yii2?

Здравствуйте. Пытаюсь подключиться ко второй БД. Много гуглил, смотрел инфу. Возможно информация устарела, или я что-то не понимаю.
В директории config создал новый файл db2.php:

Соответственно, в файле config/web.php добавил эти строчки:
$db2 = require __DIR__ . ‘/db2.php’;
‘db2’ => $db2,

Все по шаблону основной базы db.php
При определении в модели:

Ошибка, отсутствие компонента. Возможно не так произвожу подключение, но пробовал разные предложенные способы. Подскажите, что не так, пожалуйста

  • Вопрос задан более двух лет назад
  • 214 просмотров
  • Facebook
  • Вконтакте
  • Twitter

myks92

Для начала Вам необходимо создать по компоненту для каждого подключения:

Потом в коде своего приложения в моделях ActiveRecord Вам необходимо переопределить метод getDb().

Модели, в которых Вы переопределили метод getDb(), указав db1 как соединение с базой, будут получать данные из базы db1, и наоборот:
ModelName::find()->select(‘*’)->all();

Yii2. Работа с несколькими базами данных

Простой пример работы с несколькими базами данных в Yii framework 2.

Добавляем настройки подключения к нескольким БД в Yii2

Для работы с несколькими базами данных в Yii2, нужно добавить все новые соединения в файл config/web.php:

Также можно использовать отдельный файл для подключения новой базы данных, это делается следующим образом:

Не переименовываете свойство «db» компонента, так как это приведет к ошибке.

Указываем нужную БД для использования в моделе Yii2

Для использования новой базы данных в модели, нужно переопределить конфигурацию «db» установленную по умолчанию, делаем это следующим образом:

Функция getDb устанавливает нужное нам соединения с БД для модели.

Работа joinWith() для разных баз данных в Yii2

И так, когда обе таблицы находятся в одной базе данных, например: Author (model \app\models\Author.php) и Post (model \app\models\Post.php) мы делаем так:

Такая связь для таблиц находящихся в разных база данных будет выглядеть так:

При этом таблица Post из базы данных myNewDB (модель: \app\models\Order.php), использует метод для настройки соединения с базой данных getDB().

И напоследок, используйте соединение с несколькими базами данных в одном приложении с умом, не надо делать разные базы для каждой таблицы, но в свою очередь и запихивать множество таблиц в одну базу (особенно при кардинальном отличии области применения) тоже не стоит.

Web разработчик, специализируюсь на разработке full stack веб-приложений.
Если у вас есть предложения или вопросы свяжитесь со мной: facebook

Соединение с базой данных в Yii 2.x

Часто требуется подключать базу в различных местах, поэтому распространенной практикой является настройка компонента приложения. Для этого в файле web.php прописываем следующий код:

Выносим подключение в файл db.php. В файле подключения вставляем следующий код:

Теперь вы можете получить доступ к подключению к текущей БД с помощью выражения Yii::$app->db , для доступа к последующей базе данных используйте выражение \Yii::$app->secondDb

Рассмотрим несколько примеров описания имени источника данных для разных СУБД

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *