CakePHP : Manual/Developing/Models/Creating

Создание таблиц базы данных


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 будет автоматически использовать эту метку в различных случаях:


Если у вас есть заголовок и имя поля в таблице, то заголовок будет использоваться.


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-a716–446655440000

UUIDы созданы быть уникальными не только для отдельной таблицы, но и для всех таблиц и баз данных. Если вам требуется поле, которое должно оставаться уникальным для всех систем, то UUIDы подходят лучше всего.

<< Понимание моделей | Получение данных >>