/
prototype.database.txt
101 lines (87 loc) · 5.95 KB
/
prototype.database.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
Налаштування бази даних
=======================
Ми створили каркас додатка і закінчили зі структурою БД.
У даному розділі ми створимо саму базу і налаштуємо підключення до неї.
Створення бази даних
--------------------
Для створення бази даних ми використовуємо SQLite.
Оскільки підтримка баз даних в Yii заснована на [PDO](http://www.php.net/manual/en/book.pdo.php),
ми можемо легко перемикатися між різними СУБД (наприклад, MySQL, PostgreSQL)
без необхідності змінювати наш код.
Створимо файл бази даних `blog.db` в директорії `/wwwroot/blog/protected/data`.
І каталог і файл бази даних повинні мати можливість перезапису процесом
Web-сервера, як цього вимагає SQLite.
Ми можемо просто скопіювати файл бази даних з демонстраційною версією блогу із встановленої копії Yii.
Він розташований у директорії `/wwwroot/yii/demos/blog/protected/data/blog.db`.
Щоб створити базу даних вручну, можна виконати SQL-вирази із файлу
`/wwwroot/yii/demos/blog/protected/data/schema.sqlite.sql`.
> Tip|Підказка: Щоб виконати SQL-вирази, необхідно використовувати інструмент
> командного рядка `sqlite3`, який може бути знайдений на
> [офіційному Web-сайті SQLite](http://www.sqlite.org/download.html).
Встановлення підключення до бази даних
--------------------------------------
Щоб використовувати базу даних блогу у нашому додатку, необхідно задати
[конфігурацію додатка](/doc/guide/uk/basics.application#application-configuration),
що знаходиться у PHP-файлі `/wwwroot/blog/protected/config/main.php`.
Код даного файлу повертає асоціативний масив, що містить пари імʼя-значення,
кожна з яких використовується для ініціалізації доступних для запису властивостей
[екземпляра додатка](/doc/guide/uk/basics.application).
Налаштуємо компонент додатка `db` наступним чином:
~~~
[php]
return array(
…
'components'=>array(
…
'db'=>array(
'connectionString'=>'sqlite:/wwwroot/blog/protected/data/blog.db',
'tablePrefix'=>'tbl_',
),
),
…
);
~~~
Конфігурація вище говорить, що
[компонент додатка](/doc/guide/uk/basics.application#application-component)
`db` є екземпляром класу [CDbConnection] із властивістю
`connectionString`, початкове значення якого
`sqlite:/wwwroot/blog/protected/data/blog.db` та властивістю `tablePrefix`
зі значенням `tbl_`.
Тепер ми можемо використовувати підключення до бази даних `Yii::app()->db`
у будь-якому місці нашого коду. Зауважимо, що вираз
`Yii::app()` повертає екземпляр додатка, який ми створюємо у вхідному сценарії.
За більш детальним описом методів та властивостей підключення до БД,
можна звернутися до [опису його класу|CDbConnection].
Однак, у більшості випадків, підключення до БД використовується не безпосередньо, а через
[ActiveRecord](/doc/guide/uk/database.ar).
Зупинимося докладніше на властивості `tablePrefix`, яку ми використовували під час налаштування.
Дана властивість задає префікс `tbl_` для таблиць БД.
Тобто, якщо імʼя таблиці у SQL-виразі укладено у подвійні фігурні дужки
(наприклад, `{{post}}`), то компонент `db`, перед тим, як відправити запит СУБД,
перетворює його у імʼя таблиці з префіксом (наприклад, `tbl_post`).
Дана можливість особливо корисна, якщо у майбутньому ми плануємо змінити префікс таблиць без зміни коду.
Наприклад, якщо ми розробляємо CMS, ми можемо використовувати дану можливість,
щоб при установці користувач міг вибрати потрібний йому префікс.
> Tip|Підказка: Якщо ви бажаєте використовувати для зберігання даних замість SQLite
> СУБД MySQL, ви можете створити БД `blog`, використовуючи SQL із файла
> `/wwwroot/yii/demos/blog/protected/data/schema.mysql.sql`.
> Після цього змініть налаштування додатка наступним чином:
>
> ~~~
> [php]
> return array(
> …
> 'components'=>array(
> …
> 'db'=>array(
> 'connectionString' => 'mysql:host=localhost;dbname=blog',
> 'emulatePrepare' => true,
> 'username' => 'root',
> 'password' => '',
> 'charset' => 'utf8',
> 'tablePrefix' => 'tbl_',
> ),
> ),
> …
> );
> ~~~