Итак в этой статье мы рассмотрим как создаются Entity, создадим entity User, сгенерируем таблицу user и класс отвечающий за Entity. Во второй части мы научимся сохранять данные.
Для начала нам необходимо настроить наше приложение так, чтобы оно работало с Doctrine2. Для этого зайдём к конфигурационный файл. И добавим следующие строки
$container->loadFromExtension('doctrine', 'dbal', array(
'dbname' => 'your-database-name',
'user' => 'user',
'password' => 'password',
));
$container->loadFromExtension('doctrine', 'orm', array());
После этого переходим в корень проекта, затем в консоли выполняем следующую командуphp ./app/console doctrine:database:create
У вас должно вывестись сообщение, о том, что база данных была создана.Первую часть работы мы уже сделали. Теперь давайте займёмся созданием Entity. Переместимся в папку с нашим бандлом (Application/HelloBundle). Создадим тут папку Entity, сюда будут склыдваться сгенерированные доктриной классы сущностей (entity).
Все entity которые относятся к бандлу должны храниться в папке Resources/config/doctrine/metadata/orm. Это очень важно! Шаблон который вы должны использовать для создания файла entity должен выглядеть следующим образом -
путь_к_папке_с_сбандлом.имя_бандла.Entity.имя_entity.dcm.расширение_файла
Наш файл должен называться следующим образом - Application.HelloBundle.Entity.User.dcm.xml
Вспомним, что наш пользователь имеет имя и фамилию. Давайте добавим следующий код, в файл нашей сущности
<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping
xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="Application\HelloBundle\Entity\User" table="user">
<id name="id" type="integer" column="id">
<generator strategy="AUTO" />
</id>
<field name="name" type="string" length="50" unique="true" />
<field name="surname" type="string" length="50" />
</entity>
</doctrine-mapping>
Разберём вышеприведённую xml по строкам.<entity name="Application\HelloBundle\Entity\User" table="user">
Тут мы объявлем, что это entity и в качестве атрибутов добавляем name - содержит путь по которому она будет доступна - Application\HelloBundle\Entity\User (в папку Entity будет сгенерирован файл User.php). Второй параметр table говорит сам за себя, т.е. в базе данных будет создана таблица с именем user.Между тегами entity содержатся поля нашеё таблицы.
<id name="id" type="integer" column="id">
<generator strategy="AUTO" />
</id>
Поле Id - идентификатор. name - как будет именоваться поле (свойство) в классе вашей Entity.
column - как будет именоваться поле в таблице. (если его не указывать, то оно будет таким же как и атрибут name)
type - тут я думю, что понтяо. Тип поля (integer, string etc. )
Следующее и последнее поле name
<field name="name" type="string" length="50" unique="true" />
В тегах field вы описывает остальные поля которые должны присутсвовать в вашей таблице. По скольку выше мы уже рассмотрели аттрибуты name, column, type, давайте рассмотрим те которых мы не коснулись.unique - принимает занчения false, true. Определяет будет ли поле уникалным в вашей таблице. Поле не обязательное.
length-применим к строкам. Определяет длину строки.
После того как мы создали xml файл для нашей entity User перейдем в консоль и сгенерируем таблицу, и файл для нашей Entity.
php ./app/console doctrine:generate:entities
Если есть необходимость сгенерировать entity только для конкретного бандла, то необходимо выполнить следующую командуphp ./app/console doctrine:generate:entities --bundle="Application/HelloBundle"
Если определённую entity в бандле тоphp ./app/console doctrine:generate:entities --bundle="Application/HelloBundle" --entity="User"
Итак, после генериции entity у нас в папке Application/HelloBundle/Entity должен находиться файл User.php.Теперь давайте создадим таблицу в нашей базе данных. Сделаем мы это просто выполнив команду
php ./app/console doctrine:schema:create
На этом всё, во второй части как я и общещал, мы задействуем нашу Entity и сохраним данные в нашу талицу.P.S.
Просмотреть доступные команды вы можете с помощью команды
php ./app/console
Доступные типы данных в Doctrine2 вы можете посмотреть тутКак создавать entity с помощью xml разметки тут
автор ты какой-то велосипедист
ОтветитьУдалитьвсе это можно сделать одной командой
app/console doctrine:generate:entity "MyCustomBundle" "User\Group" --fields
="name:string(255) description:text"
Причем тут велосипед?:) Я придумал что-то новое или переделал/дописал свое - не доктриновское?
ОтветитьУдалить