1 of 20

Yii2. Робота з БД

Виконання SQL - запитів

2 of 20

DAO – об’єктно-орієнтований інтерфейс доступу до реляційних БД

  • Включає в себе конструктор запитів та Active Record
  • Підтримує наступні БД:
    • MySQL
    • MariaDB
    • SQLite
    • PostgreSQL (8.4 або вище)
    • CUBRID (9.3 або вище)
    • Oracle
    • MSSQL (2008 або вище)

3 of 20

Підключення до БД

  • Yii2 Basic Template: config/db.php
  • Yii2 Advanced Template: common/config/main-local.php

4 of 20

Механізм

  • createCommand (Екземпляр класу Command)
  • queryBuilder (конструктор запитів на вибирку)
  • ActiveRecord

5 of 20

Виконання SQL-запитів

Після створення екземпляру додатку,

можна виконувати SQL запит:

  • Створити екземпляр команди із SQL-запиту
  • Прив’язати параметри (не обов’язково)
  • Викликати один із методів виконання SQL

6 of 20

Приклад. Метод queryAll()

  • Повертає послідовність елементів – асоціативних масивів з іменами стовпчиків та значень

7 of 20

Приклад. Метод queryOne()

  • Повертає один перший рядок або false, якщо нічого не буде вибрано

8 of 20

Приклад. Метод queryColumn()

  • Повертає один перший стовпчик або порожній масив

9 of 20

Приклад. Метод queryScalar()

  • Скалярне значення або false при відсутності результату

10 of 20

Прив’язка параметрів

  • В запиті використовуємо маркери для іменування параметрів (:id, :product_id тощо)
  • Для прив’язування параметрів використовуємо один із методів:
  • bindValue() – прив’язка одного параметру по значенню
  • bindValues() – прив’язка декількох параметрів в одному запиті
  • bindParam() – прив’язка по посиланню

11 of 20

Метод bindValue()

  • Прив’язка одного або декількох по ланцюжку параметрів.

12 of 20

Серійне виконання підготовлених запитів

13 of 20

Метод bindValues()

14 of 20

Метод bindParam() – передача параметрів за посиланням

15 of 20

Виконання запитів, що не вертають дані (не-SELECT запити)

  • Для реалізації запитів UPDATE, DELETE, INSERT потрібно викликати метод execute() – вертає кількість задіяних рядків коду:

16 of 20

Як варіант, можна викликати відповідні методи update(), insert(), delete():

17 of 20

Метод batchInsert() для множинної вставки

18 of 20

Екранування імен стовпців та таблиць

  • [[column_name]] – ім’я стовпчика заключаємо в подвійні квадратні дужки
  • {{table_name}} – ім’я таблиці заключаємо в подвійні фігурні дужки

19 of 20

Використання префіксів таблиць

  • Задання префіксу для таблиць відбувається в налаштуваннях бази даних додатковим елементом tablePrefix:
  • Components -> db -> tablePrefix
  • Для звернення до таблиці при цьому потрібно використовувати такий синтаксис {{%product}}

20 of 20

Джерела