Как стать автором
Обновить

Sluggable, Timestampable и так далее в Symfony 2

Symfony *
Перевод
В второй Symfony, мы можем присоеденить бихейверы (behaviours) к нашим моделям используя расширения от Doctrine. Один пакет (bundle), StofDoctrineExtensionsBundle, даёт возможность использовать следующие бихейверы: Sluggable, Translatable, Timestampable, Loggable и Tree.

Вышеописанные расширения позволяет превратить обычные ссылки в удобочитаемые (sluggable), осуществлять простую поддержку интернационализации (translatable), организовывать контроль версий (loggable), создавать и автоматически заполнять дату создания и обновления сущности (timestampable), и организовывать древовидную структуру хранения данных (tree).
Читать дальше →
Всего голосов 19: ↑17 и ↓2 +15
Просмотры 11K
Комментарии 4

Дублирование объекта при попытке получить данные из таблицы с ключом DateTime

Doctrine ORM *
На днях я столкнулся со странной ошибкой в работе Doctrine2(версия 2.2.2).

Суть проблемы


При попытке получить данные (в виде массива объектов(Entity)) из таблицы с ключом типа DateTime, Doctrine возвращала массив состоящий из одного объекта (первой строки) и ссылок на него же.
описание ошибки и её решение под катом
Всего голосов 5: ↑4 и ↓1 +3
Просмотры 1K
Комментарии 4

Doctrine ORM behaviors, или как эффективно использовать трейты

PHP *Symfony *Doctrine ORM *
С момента релиза php 5.4 уже прошло некоторое время, и мы решили поэкспериментировать с трейтами (traits), оценить их практическое применение. Как их можно использовать вместе с объектами Doctrine2?

Трейты


Трейты в php — это набор свойств и методов, которые можно добавить в класс.
Они реализованы на уровне интерпретатора и являются абсолютно прозрачными для Doctrine.

Трейты спроектированы для горизонтального повторного использования и идеально подходят для добавления общего поведения в несколько объектов.
Читать дальше →
Всего голосов 20: ↑20 и ↓0 +20
Просмотры 6.7K
Комментарии 17

Прикручиваем Doctrine 2 ORM к Silex

PHP *Symfony *Doctrine ORM *
Tutorial
Недавно узнал о великолепном микро-фреймворке Silex, и примерно столь же недавно о модели ORM. Туториал будет полезен тем, кто хочет связать одно с другим.
Читать дальше →
Всего голосов 16: ↑9 и ↓7 +2
Просмотры 15K
Комментарии 11

Полная поддержка GROUP_CONCAT в Doctrine2

Symfony *Doctrine ORM *
Recovery mode
Привет всем.

Так сложилось, что в проекте, над которым я сейчас работаю, потребовалось использовать функцию GROUP_CONCAT(). К сожалению, Doctrine2 «из коробки» эту функцию не поддерживает. Имеющееся же расширение от одного из разработчиков Doctrine2 (Benjamin Eberlei) значится как «limited support for GROUP_CONCAT». Понимаю, что использование данной функции автоматом ставит проект в зависимость от MySQL, но менять СУБД как перчатки не планируется. Так что оставим этот вопрос за рамками поста.

Поскольку погуглив я не нашел готового решения, решил написать его сам (взяв за основу разработку Benjamin'а). Комментировать там особо нечего, поэтому просто представляю его на суд общественности:
Читать дальше →
Всего голосов 8: ↑7 и ↓1 +6
Просмотры 7.1K
Комментарии 3

Как связать Yii Framework и Doctrine 2 ORM?

PHP *Yii *Doctrine ORM *
Из песочницы


Мне очень нравится Yii Framework. Он быстрый, удобный, гибкий. Мне нравится, как реализован в нём паттерн ActiveRecord. Но бывают случаи, когда бизнес-логика, а, если быть точным, доменная логика, очень сложная и постоянно растёт и модифицируется. В таких случаях удобнее пользоваться паттерном DataMapper.

В тоже время мне нравится Doctrine 2 ORM. Это пожалуй самая мощная ORM для PHP, имеющая широчайший функционал. Да, возможно, она «тяжеловата» и замедляет работу приложения. Но начиная разработку, прежде всего стоит думать об архитектуре приложения, так как «преждевременная оптимизация корень всех бед»

Таким образом, однажды мне пришла в голову мысль связать 2 этих интересных мне инструмента. Как это было сделано, описано ниже.
Читать дальше →
Всего голосов 29: ↑21 и ↓8 +13
Просмотры 20K
Комментарии 19

Связываем Doctrine Entity и Doctrine Document на форме в Sonata Admin Bundle

Разработка веб-сайтов *Symfony *MongoDB *
Из песочницы
Tutorial
В процессе разработки интернет-магазина была поставлена задача реализовать адресную книгу для авторизованного пользователя. Таким образом, чтобы сам пользователь хранился в базе mysql, а связанные с ним адреса — в mongoDB. Отдельного внимания данная задача заслуживает в части управления пользователями и их адресными книгами из админки, основанной на SonataAdminBundle.

Исходные данные:


Есть доктриновская сущность User и доктриновский документ Address. Между ними должна быть установлена связь один-ко-многим. Всё это должно управляться с формы добавления пользователя в админке на базе сонаты. Поскольку у 1 юзера может быть много адресов, на форме добавления пользователей должна быть реализована коллекция форм добавления адресов с кнопками «добавить», «удалить» и inline редактированием полей связанных адресов. Этим мы и займёмся далее.

Что нам надо:


1) Установить @Gedmo\References doctrine-extension

Это нужно, чтобы мы могли получать коллекцию связанных адресов для заданного юзера из монго, и наоборот — привязанного юзера к каждому адресу из mysql.
Читать дальше →
Всего голосов 12: ↑11 и ↓1 +10
Просмотры 5.9K
Комментарии 3

Внедряем работу с координатами в sonata-admin

PHP *Symfony *Doctrine ORM *
Доброго времени суток, %habrauser%!

Недавно встала задача, хранить в базе данные GPS с дальнейшей возможностью применения различных геометрических функций mysql. Управление координатами должно осуществляться из sonata-admin. Что из этого получилось можно прочитать под катом.
Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 4K
Комментарии 0

Неочевидные проблемы с быстродействием в Doctrine, связанные с гидрацией объектов

Symfony *Doctrine ORM *Отладка *
Недавно я реализовал функции API в проекте с бэк-эндом Symfony2, использущем Doctrine в качестве ORM.

И, как это иногда бывает, скороость отрабатывания не вполне меня устроила. На несложный запрос ответ генерировался аж 7,2 сек.



Первое предположение, где-то запускаются какие-то тяжелые запросы. Но через профайлер не видно ничего такого, что могло бы
навести на мысль о том, где скрылась проблема. SQL-запросов многовато, но все быстрые, и общее их время выполнения всего 223 милисекунды.

Читать дальше →
Всего голосов 24: ↑24 и ↓0 +24
Просмотры 9.9K
Комментарии 11

Реализация стейтмашины на Zend Framework3+Doctine2

Zend Framework *Doctrine ORM *
Из песочницы

Введение: зачем нужна стейтмашина


В приложениях часто необходимо ограничивать доступ к тем или иным действиям над объектом. Для этого используют RBAC-модули, которые решают задачу ограничения доступа в зависимости от прав пользователя. Остается нерешенной задача управления действиями в зависимости от состояния объекта. Эта задача хорошо решается с помощью конечного автомата или state machine. Удобная стейтмашина позволяет не только собрать в одном месте все правила переходов между состояниями объекта, но и наводит некоторый порядок в коде отделяя правила переходов, проверки условия и обрабочкики и подчиняя их общим правилам.


Хочу поделиться реализацией стейтмашины под Zend Framework 3 с использованием Doctrine 2
для работы с базой данных. Сам проект можно найти по ссылке.


А здесь я хочу поделиться основными заложенными принципами.

Читать дальше →
Всего голосов 4: ↑4 и ↓0 +4
Просмотры 1.8K
Комментарии 14

PHPUnit. Мокаем Doctrine Entity Manager

PHP *Тестирование веб-сервисов *
Tutorial

Во многих современных приложениях для работы с базой данных используется проект Doctrine ORM.


Хорошим тоном считается выносить работу с БД в сервисы. А сервисы нужно тестировать.


Для тестирования сервисов можно подключить тестовую базу данных, а можно замокать Менеджер сущностей и репозитории. С первым вариантом всё понятно, но не всегда есть смысл разворачивать БД для тестирования сервиса. Об этом и поговорим.

Читать дальше →
Всего голосов 13: ↑13 и ↓0 +13
Просмотры 6.2K
Комментарии 11