Создание таблиц базы данных
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ы подходят лучше всего.
<< Понимание моделей |
Получение данных >>