Создание таблиц базы данных
CakePHP спланирован быть независимым и будет работать с MySQL, MSSQL, Oracle, PostgreSQL и другими СУБД. Вы можете создавать таблицы в базе данных, как обычно. Когда вы создадите классы моделей, то автоматически будет устанавлено соответствие с созданными таблицами.
По соглашению имена таблицам даются во множественном числе и пишутся строчными буквами. Если имя таблицы состоит из нескольких слов, то слова надо разделять символом подчеркивания. Например, модели Ingredient должна соответствовать таблица с именем ingredients. Модели с именем EventRegistration – таблица event_registrations. CakePHP исследует ваши таблицы для определения типов данных каждого поля и использует эту информацию для автоматизации различных функциональных возможностей, например, таких, как вывод полей в отображение.
Имена полей, по соглашению, состоят из строчных букв и разделяются, при необходимости, символом подчеркивания.
Далее в этом разделе, вы узнаете, как ставит в соответствие типы полей базы данных и типы данных PHP, и как CakePHP может автоматизировать задачи на основе того, как определены ваши поля.
Ассоциации типов данных
Каждая СУБД определяет типы данных немного по разному. С помощью класса источников данных для каждой СУБД, CakePHP ставит в соответствие эти типы тому, что он распознал и создает единообразный интерфейс. Поэтому, не имеет значение на какой СУБД вам необходимо запустить приложение.
В таблицах ниже представлено соответствие для различных СУБД.
MySQL
CakePHP Type | Field Properties |
primary_key | NOT NULL auto_increment |
string | varchar(255) |
text | text |
integer | int(11) |
float | float |
datetime | datetime |
timestamp | datetime |
time | time |
date | date |
binary | blob |
boolean | tinyint(1) |
MySQLi
CakePHP Type | Field Properties |
primary_key | DEFAULT NULL auto_increment |
string | varchar(255) |
text | text |
integer | int(11) |
float | float |
datetime | datetime |
timestamp | datetime |
time | time |
date | date |
binary | blob |
boolean | tinyint(1) |
ADOdb
CakePHP Type | Field Properties |
primary_key | R(11) |
string | C(255) |
text | X |
integer | I(11) |
float | N |
datetime | T (Y-m-d H:i:s) |
timestamp | T (Y-m-d H:i:s) |
time | T (H:i:s) |
date | T (Y-m-d) |
binary | B |
boolean | L(1) |
DB2
CakePHP Type | Field Properties |
primary_key | not null generated by default as identity (start with 1, increment by 1) |
string | varchar(255) |
text | clob |
integer | integer(10) |
float | double |
datetime | timestamp (Y-m-d-H.i.s) |
timestamp | timestamp (Y-m-d-H.i.s) |
time | time (H.i.s) |
date | date (Y-m-d) |
binary | blob |
boolean | smallint(1) |
Firebird/Interbase
CakePHP Type | Field Properties |
primary_key | IDENTITY (1, 1) NOT NULL |
string | varchar(255) |
text | BLOB SUB_TYPE 1 SEGMENT SIZE 100 CHARACTER SET NONE |
integer | integer |
float | float |
datetime | timestamp (d.m.Y H:i:s) |
timestamp | timestamp (d.m.Y H:i:s) |
time | time (H:i:s) |
date | date (d.m.Y) |
binary | blob |
boolean | smallint |
MS SQL
CakePHP Type | Field Properties |
primary_key | IDENTITY (1, 1) NOT NULL |
string | varchar(255) |
text | text |
integer | int |
float | numeric |
datetime | datetime (Y-m-d H:i:s) |
timestamp | timestamp (Y-m-d H:i:s) |
time | datetime (H:i:s) |
date | datetime (Y-m-d) |
binary | image |
boolean | bit |
Oracle
CakePHP Type | Field Properties |
primary_key | number NOT NULL |
string | varchar2(255) |
text | varchar2 |
integer | numeric |
float | float |
datetime | date (Y-m-d H:i:s) |
timestamp | date (Y-m-d H:i:s) |
time | date (H:i:s) |
date | date (Y-m-d) |
binary | bytea |
boolean | boolean |
number | numeric |
inet | inet |
PostgreSQL
CakePHP Type | Field Properties |
primary_key | serial NOT NULL |
string | varchar(255) |
text | text |
integer | integer |
float | float |
datetime | timestamp (Y-m-d H:i:s) |
timestamp | timestamp (Y-m-d H:i:s) |
time | time (H:i:s) |
date | date (Y-m-d) |
binary | bytea |
boolean | boolean |
number | numeric |
inet | inet |
SQLite
CakePHP Type | Field Properties |
primary_key | integer primary key |
string | varchar(255) |
text | text |
integer | integer |
float | float |
datetime | datetime (Y-m-d H:i:s) |
timestamp | timestamp (Y-m-d H:i:s) |
time | time (H:i:s) |
date | date (Y-m-d) |
binary | blob |
boolean | boolean |
Sybase
CakePHP Type | Field Properties |
primary_key | numeric(9,0) IDENTITY PRIMARY KEY |
string | varchar(255) |
text | text |
integer | int(11) |
float | float |
datetime | datetime (Y-m-d H:i:s) |
timestamp | timestamp (Y-m-d H:i:s) |
time | datetime (H:i:s) |
date | datetime (Y-m-d) |
binary | image |
boolean | bit |
Заголовки (Titles)
Объект, в физическом смысле, обычно имеет имя, приписываемое ему. Человек имеет имя, например, Иван, Петр или Василий. Блог имеет заголовок. У раздела есть название.
После определения заголовка или имени поля CakePHP будет автоматически использовать эту метку в различных случаях:
- Скаффолдинг — заголовки страниц, метки для полей ввода
- Списки — обычно используется для выпадающих списков
- TreeBehavior — пересортировка, отображения дерева
Если у вас есть заголовок и имя поля в таблице, то заголовок будет использоваться.
created и modified
Если вы создадите в вашей таблице поле
created или
modified типа datetime, то CakePHP будет автоматически заполнять их, когда запись будет создаваться или сохраняться в БД (до тех пор, пока сохраняемые данные не будут иметь значения для этих полей).
Поля created и modified получат в качестве значений текущую дату и время, когда запись добавляется. Поле modified будет обновлено значением текущей даты и времени, когда существующая запись будет сохраняться.
Примечание: Поле с именем
updated будет вести себя также, как поле modified. Эти поля должны быть типа datetime со значением NULL по умолчанию, для распознования CakePHP.
Использование UUID-ов в качестве первичного ключа
Первичным ключам обычно назначают тип INT. СУБД будет автоматически увеличивать значение поля для каждой, вновь добавленной, записи. Альтернативный вариант – это, если вы определите первичный ключ типа CHAR(36), то CakePHP будет автоматически генерировать UUIDы, когда будет создаваться новая запись.
UUID – это 32 байтная строка, разделенная четырьмя дефисами (всего 36 символов).
Например:
550e8400-e29b-41d4-a7
16–446655440000
UUIDы созданы быть уникальными не только для отдельной таблицы, но и для всех таблиц и баз данных. Если вам требуется поле, которое должно оставаться уникальным для всех систем, то UUIDы подходят лучше всего.
<< Понимание моделей |
Получение данных >>