Блог хеллоуворлдщика

Внешний + первичный ключ в Doctrine ORM

Иногда встает необходимость использовать первичный ключ таблицы как связь к другой таблице. От некоторых людей я слышал, что в Doctrine ORM такое сделать невозможно и приходиться иметь обязательно инкрементный первичный ключ. На самом деле, это необязательно и возможность совмещать первичный ключ с внешним у Doctrine ORM имеется из коробки с версии 2.1. Для этого нам нужен атрибут association-key (для XML; или associationKey для YAML).

К сожалению, это не совсем очевидная возможность и люди испытывают трудности с поиском информации по данному вопросу. Поэтому, я решил опубликовать короткую заметку об этом.

Читать далее

Почему хейтят Yii?

Почему хейтят Yii?

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

Давайте вернемся к истокам, а точне на то, как позиционирует себя фреймворк Yii. В первую очередь, это набор инструментов, чтобы реализовать задумку быстро и просто срезая углы, где это возможно. Это очень выгодный фреймворк для заказчика и разработчика, т.к. с одной стороны он экономит средства, а с другой время. Но и здесь есть его потолок: не CRUD (Create, Read, Update, Delete) приложения могут не дать прироста в скорости. Хорошо, что большая же часть веб-приложений как раз построена на CRUD.

У фреймворка есть классные вещи, которые очень ускоряют разработку, это:

  • ListView и GridList;
  • валидаторы;
  • простой ActiveRecord;
  • генераторы моделей, форм, контроллеров и т.п.;
  • глобальный сервис-локатор (Yii::app()/Yii::$app);
  • RBAC из коробки;
  • своя политика разработки;
  • огромное комьюнити;
  • низкий порог вхождения;
  • и многое другое.

И пожалуй, из всего о чем стоит поговорить, это о политике разработки.

Читать далее

Plural или множественное число в JS

Очень полезная и важная функция при разработке какого-либо приложения, это - наличие возможности использовать множественные формы по склонениям в зависимости от какого-либо параметра. Можно использовать i18next, но не всегда это нужно. Выход очень простой: написать хелпер для нужного языка по уже известным формам склонения слова ссылка 1 и ссылка 2.

Читать далее

Переехал на DigitalOcean. Кто хочет $50?

Вчера переехал на DigitalOcean с FastVPS, потому что FastVPS хочет ~$5 за 5Gb пространства, тогда как DigitalOcean за те же деньги дает 20Gb. Выгодно? Выгодно.

И у них есть приятный бонус: если вы воспользуетесь моей реферальной ссылкой, то получите $50! Круто, да? Я, правда, получу $25. =( Знал бы я раньше, то зарегался бы по чье-нибудь ссылке, а не в холостую. Эх... Но хоть вы не упустите возможность!

Реферальная ссылка: https://m.do.co/c/65800f5e0c56

Читать далее

Библиотека для работы с Nested Set в Doctrine ORM

Опубликовал библиотеку, которая помогает работать с Nested Set Tree. Пока что не реализован весь функционал, но можно уже пользоваться тем, что есть. Постепенно буду его добавлять и улучшать.

Ссылка на репозиторий: https://github.com/bupy7/doctrine-nested-set

Читать далее

Многоязычность или мультиязычность в PHP

Многие сталкиваются с такой проблемой, как поиск подходящего решения в решение вопроса с мультиязычностью и переводами в целом. Мало кто знает, но в PHP есть такое расширение Intl, которое из коробки поддерживает различные фичи связанные с переводами, форматированием и прочими плюхами полезными не только для мультиязычных проектов, но и одноязычных тоже. Все это называется - интернационализация. И сегодня я хочу осветить такой вовсе не странный и весьма простой вопрос с переводами. Дак, как же все-таки сделать это просто, быстро и безболезненно? Читайте дальше! =)

Читать далее

Новая версия модуля для работы с часовым поясом

Вышло обновление для zf-time-zone. Теперь модуль также работает и на Zend Expressive! Для тех, кто использовал модуль только для Zend Framework 3 - обратная совместимость сохранена.

Ссылка на расширение: https://github.com/bupy7/zf-time-zone

Читать далее

Пакетные миграции в Yii2

Недавно мне написал человек, который захотел работать с миграциями пакетно, т.е. не запускать каждую миграцию построчно через консоль, а реализовать некую команду, в которой будет весь список нужных миграций и два метода: up и down. Что-ж, ничего сложного в этом нет, достаточно всего лишь...

Читать далее

SELECT COUNT(*) FROM (sub_query) в Doctrine 2

Не мог не заметить, какое количество вопросов по этому поводу, т.к. сам когда-то искал на это ответ. Проблема в том, что хорошего ответа нет.

Если у вас сложный запрос и вам нужно получить по нему COUNT(*), то в сети можно найти вариант вида:

$subQuery = $qb->select('main.id')
    ->from('Order\Entity\Order', 'main')
    ->where('main.published = :published')
    ->setParameters([
        'published' => true,
    ]);
 
$qb->select('COUNT(o)')
    ->from('Order\Entity\Order', 'o')
    ->where($qb->expr()->in('o.id', $subQuery->getDQL()))
    ->setParameters($subQuery->getParameters());
 
return $qb->getQuery()->getResult();

Но такой запрос очень медленный. Он подойдет для незначительного объема данных.

Читать далее

Все ненавидят Zend Framework

17 октября 2018 в своем личном блоге Мэтью О'Финни сделал пост Будущее Zend Framework в котором, к сожалению, это самое будущее не совсем светлое.

Если коротко, то основные разработчики Zend Framework оставляют компанию, в которой данный продукт разрабатывался, т.к. компания решила направить свои силы в другое русло, а именно в Zend Server.

Что будет с Zend Framework даже непонятно, хотя, обещают не бросать. Будем надеяться и верить.

Читать далее