Symfony Doctrine YML

Начал изучать Doctrine и в документации описывается пример работы на основе PHP-класса, но так же говорится, что таблицу можно описывать в YML-файле. Лично для меня это намного приятный для чтения формат представления данных, и тут есть свои нюансы, о которых ниже.

И так поехали, будем эксперементировать на примере созданного ранее бандла HelloBundle

Создание сущностного класса

1. создаем файл называемый “сущность”, что значит базовый класс, содержащий данные:

/Symfony/src/Acme/HelloBundle/Entity/Product.php

<?php
namespace Acme\HelloBundle\Entity;
class Product
{
}

если забыть создать этот файл, то в пункте 4 мы получим ошибку:

[RuntimeException]
Unable to determine where to save the "Acme\HelloBundle\Entity\Product" class (use the --path option).

2. создаем YAML определения метаданных в файле /Symfony/src/Acme/HelloBundle/Resources/config/doctrine/Product.orm.yml

Acme\HelloBundle\Entity\Product:
    type: entity
    table: bookmarks
    id:
        id:
            type: integer
            generator: { strategy: AUTO }
    fields:
        name:
            type: string
            length: 100
        uri:
            type: text
        dateAdded:
            type: integer

отлично, наша таблица описана, однако в документации, чтобы не усложнять, опущен момент комментирования полей и самой таблицы, поэтому такой пример я решил привести ниже:

Entity\Example:
  type: entity
  table: example
  fields:
    id:
      type: integer
      id: true
      generator:
        strategy: AUTO
    label:
      type: string
      columnDefinition: varchar(255) NOT NULL DEFAULT 'default_value' COMMENT 'This is column comment'

или еще более простой вариант:

MyModel:
  columns:
   count:
    type:     integer
    comment:  'Column comments accept a maximun of 255 characters.\nThey can also include newline characters (\\n) each one of which counting as one characters.\nThis way you can easily explain each column to database administrators that do not know about your application.'
  options:
    comment:  'Table comments can be 60 characters long but no line breaks!'

этот вариант сгенерирует следующий SQL-запрос:

CREATE TABLE my_model (
id BIGINT AUTO_INCREMENT,
count BIGINT COMMENT 'Column comments accept a maximun of 255 characters.\nThey can also include newline characters (\\n) each one of which counting as one characters.\nThis way you can easily explain each column to database administrators that do not know about your application.',
PRIMARY KEY(id)
)
COMMENT = 'Table comments can be 60 characters long but no line breaks!'
ENGINE = INNODB;

Создание геттеров и сеттеров

1. чистим кэш, как это сделать я писал ранее »

2. в консоле выполняем команду 

php app/console doctrine:generate:entities Acme/HelloBundle/Entity/Product

3. смотрим в /Symfony/src/Acme/HelloBundle/Entity/Product.php и видим, что в файл прописались все гетеры и сетеры, которые мы объявили в YAML-файле.

*обратите внимание, рядом появился файл Product.php~ это тот код, который был до выполнения команды (предыдущая версия файла).

Создание таблиц/схемы для базы данных

php app/console doctrine:schema:update --force

ну а дальше все как в документации.

Отказываемся от YAML

Как показывает опыт дальнейшей разработки, использование YAML оказывается не очень удобным т.к. при изменении, добавлении или удаления поля, приходится вносить изменения не только в YAML-файл, но и в файл сущности /Symfony/src/Acme/HelloBundle/Entity/Product.php

Создаем уникальный индекс

Все бы хорошо, но пришлось столкнуться с проблемой добавления индекса, на всех сайтах что я успел нагуглить пишут, что делается это с помощью добавления следующей строчки в описание таблицы:

<?php
namespace Acme\HelloBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="bookmarks", uniqueConstraints={@UniqueConstraint(name="uri_md5",columns={"uri_md5"})})
*/
class Product
{

как видно из примера мы делаем поле uri_md5 уникальным индексом который назовем одноименно uri_md5

но, если Вы решите синхронизировать Вашу сущность с таблицей, с помощью команды:

php app/console doctrine:schema:update --force

то получите ошибку:

[Doctrine\Common\Annotations\AnnotationException]
[Semantical Error] The annotation "@UniqueConstraint" in class Acme\HelloBundle\Entity\Product was never imported. Did you maybe forget to add a "use" statement for this annotation?

и правильно, потому что нужно было написать так:

<?php
namespace Acme\HelloBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="bookmarks", uniqueConstraints={@ORM\UniqueConstraint(name="uri_md5",columns={"uri_md5"})})
*/
class Product
{

Создание геттеров и сеттеров 

При этом, генерацию гетеров и сетеров можно выполнить командой:

$ app/console doctrine:generate:entities AcmeHelloBundle:Product

надеюсь, Вы пополнили свой багаж знаний и готовы к изучению нового, всем удачки!

Оцени публикацию:
  • 5,17
Оценили человек: 5
Теги : Symfony, Doctrine, YML, YAML

Похожие статьи:

Справочники и учебники:


Комментарии посетителей:
  • Заработок на дому официальное трудоустройство.
    14 января 2017, 16:10 коммент полезен : 0 # Regorwot1
  • Официальное трудоустройство, работа через интернет.
    14 января 2017, 18:26 коммент полезен : 0 # Wegorwot1
  • Официальная работа на дому с обучением.
    24 января 2017, 11:24 коммент полезен : 0 # Regorwot (гость)
  • Ваш первый заработок за один час. Законно и без рисков!
    27 января 2017, 19:54 коммент полезен : 0 # Lnikawot (гость)
  • Официальная работа через интернет с обучением.
    29 января 2017, 15:20 коммент полезен : 0 # Vpavelwot (гость)
  • Имеется такая услуга - добровольное медицинское обслуживание (или ДМО).
    Она предполагает, что вы платите небольшую сумму за абонемент и ходит на прием в течение года БЕСПЛАТНО.
    Однако соцопросы показывают, что лишь 5% жителей Санкт-Петербурга знают о ее существовании.
    Почему так происходит?
    Да потому что частным клиникам намного выгодней сдирать с людей деньги за каждое посещение.
    А если какой-нибудь сотрудник клиники попытается посоветовать добровольное медицинское обслуживание клиенту - это сулит ему увольнением.
    Эта информация уже спровоцировала множество скандалов,  после того как информацию об услуге распространил один возмущенный врач.
    Его уволили , после того, как он посоветовал ДМО постоянному клиенту.
    Самое ужасное, что официальные положения по ДМО есть в открытом доступе, просто натыкались на эту информацию единицы.
    Как отстоять свои права?
    О правилах оказания такой услуги и обязанностях клиник можно узнать, просто вбив в Яндекс фразу: "добровольное медицинское обслуживание".
    Обязательно обслуживание, а не страхование.

    34j5c6h86
    23 февраля 2017, 20:47 коммент полезен : 0 # Patrickjenty (гость)
  • Существует такая услуга - добровольное медицинское обслуживание (или ДМО).
    Она предполагает, что вы вносите небольшую сумму за то, что посещает врачей в течение года бесплатно.
    Однако соцопросы показали, что лишь 3% жителей города знают о ее существовании.
    Почему так происходит?
    Да потому что клиникам намного выгодней сдирать с людей деньги за каждое посещение.
    А если какой-нибудь сотрудник клиники попытается рассказать про добровольное медицинское обслуживание клиенту - это сулит ему увольнением.
    Информация о ДМО уже вызвала много скандалов, сразу после того как информацию об услуге распространил один возмущенный врач.
    Его уволили , после того, как он предложил ДМО постоянному клиенту.
    Страшно, что информация по ДМО присутствуют в открытом доступе, просто натыкались на эту информацию только случайные люди.
    Как отстоять свои права?
    О правилах оказания такой услуги и обязанностях частных клиник можно узнать, сделав запрос в Яндексе: "добровольное медицинское обслуживание".
    Обязательно обслуживание, а не страхование.

    34j5c6h86
    23 февраля 2017, 22:02 коммент полезен : 0 # Patrickjenty (гость)
  • <a href=http://mototexdom.ru/kvadrotsikly-detskie>купить детский квадроцикл</a>
    25 февраля 2017, 01:34 коммент полезен : 0 # Antoniomyday (гость)
  • На сайтах с относительно низкой конкуренцией можно вскрыть за час-два и поправить пару недель.

    Задачи которые сейчас я предлагаю разрешить:

    -Узнать как работает с сайтом ваш специалист и проверить его компетентность?
    -Покажу недоработки допущенные раньше и составлю план по их исправлению.
    -Покажу как проверять работу SEO специалиста.


    Планируете пригласить SEO спеца?

    -Помогу провести собеседование потенциальногоSEO специалиста. Разберу по каким критериям оценивать его уровень.
    - Опишем различия между нанятым в штат SEO, делегированном SEO и раскрутке сайтов своими средствами.


    Планируете своими силами продвинуть существующий вебсайт. Расскажу все насчет продвижения, после консультации вам будет понятно:

    -Как много будет стоить разработка вашего сайта
    -Сколько по времени надо будет его продвигать с тем чтобы достигнуть топов
    -Из каких ступеней формируется само продвижение, обобщенно рассмотрим каждый из них.
    -Разберем в связи с чем не следует пользоваться услугами контор, оказывающих предложения по SEO


    Собираетесь создать интернет-сайт и организовать его продвижение?

    -Расскажу и покажу как организовать наиболее бюджетный и отличный вариант веб-сайта.
    -В какой степени большим или сложным обязан стать ваш интернет-сайт чтобы конкурировать в топе.
    -Как много вкладывают все ваши конкуренты в продвижение.
    -Насколько реально войти в топы с вашим вебсайтом и с вашим бюджетом.


    Есть желание проверить окупится ли консультирование?

    Позвоните по телефону либо в skype - я отвечу на любые проблемы касающиеся SEO и собственного web-ресурса.

    Любые вопросы - позвоните +7(921)9114848 или по скайпу admin1.ru
    Часовая консультация по стоимости 3тыс рублей, допускается заключение договора и платеж на расчетный счет.
    Оказываю бесплатные консультации за отзыв (таким образом у подавляющего большинства вебсайтов проблему видно практически сразу)

    acol7wns24
    26 февраля 2017, 20:46 коммент полезен : 0 # Jamesquale (гость)
  • Большинство проблем на сайтах с низкой посещаемостью можно раскрыть за пару часов и поправить пару недель.

    Проблемы которые сейчас я предлагаю разрешить:

    -Диагностировать как работает с сайтом ваш сегодняшнийспециалист и проверить текующую ситуацию по SEO?
    -Покажу просчеты совершенные раньше и составлю сценарий по внесению правок.
    -Покажу как контролировать работу SEO мастера.


    Желаете взять SEO спеца?

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


    Решили своими силами продвинуть имеющийся сайт. Расскажу все насчет продвижения, после консультирования вам станет ясно:

    -Как много будет стоить ваш сайт
    -Сколько по времени необходимо будет его продвигать чтобы добиться топов
    -Из каких именно ступеней формируется само по себе продвижение, в целом разберем каждый из них.
    -Проанализируем по какой причине не стоит пользоваться услугами контор, оказывающих предложения по SEO


    Собираетесь создать веб-сайт и начать его продвижение?

    -Расскажу и далее продемонстрирую как организовать наиболее бюджетный и хороший вариант web-сайта.
    -До какой степени объемным или сложным может быть ваш собственный web-сайт чтобы конкурировать в топе.
    -Как много вбухивают все ваши конкуренты в продвижение.
    -в какой мере осуществимо войти в топы с вашим веб-сайтом и с вашим бюджетом.


    Есть желание узнать окупится ли консультация?

    Звоните по телефону или в скайп - я дам ответ на все имеющиеся вопросы касающиеся SEO и предполагаемого сайта.

    Абсолютно любые вопросы - позвоните +7(921)9114848 или по скайпу admin1.ru
    Часовая беседа стоит 3тыс рублей, возможно подписание договора и платеж на расчетный счет.
    Оказываю бесплатные консультации за отзыв (так например у многих интернет-ресурсов проблему видно практически сразу)

    acol7wns24
    26 февраля 2017, 22:08 коммент полезен : 0 # Jamesquale (гость)
Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Введите изображенные цифры:
Captcha
Главная
X

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2017 YaPro.Ru

Главная » Веб-мастеру » PHP »