Как добавить вычисляемые поля/формулы в объекты Doctrine?

Я хотел бы использовать эквивалент аннотаций Hibernate @Formula в объектах Doctrine.

Моя проблема связана с полем datetime, которое я хотел бы отобразить в определенном формате (RFC2822), чтобы я мог легко использовать его в javascript Datatables.

Я хотел бы избежать использования функций render из Datatables. Я хотел бы использовать эту сущность, как обычно, из QueryBuilder. Я уже пытался реализовать класс JsonSerializable в своем объекте, который вполне работает, но базовые ассоциации ManyToOne неправильно закодированы json_encoded.

Вот пример моей сущности:

/**
 * @ORM\Table(name = "user")
 * @ORM\Entity
 */
class User{

/**
 * @var int
 *
 * @ORM\Column(name = "id", type = "integer", nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy = "IDENTITY")
 */
private $id;

/**
 * @var \DateTime|null
 *
 * @ORM\Column(name = "start_date", type = "date", nullable=true)
 */
private $startDate;

//Getters & setters...
}

Я использую это так в своем UserRepository:

$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('l, u')
    ->from('User', 'u')
    ->join('u.location', 'l')
    ->where('u.userId=1');
$data['json']=$qb->getQuery()->getResult();

Использование getArrayResult() не меняет моего беспокойства.

Я хотел бы создать новый метод (или, может быть, частное статическое поле), например getStartDateRFC(), в моем объекте:

public function getStartDateRFC(){
    return $this->startDate->format(DateTime::RFC2822);
}

Возможно ли это без использования тяжелого Пользовательские типы сопоставления из Doctrine?

Какой сериализатор вы используете в настоящее время? Компонент Symfony Serializer (какой нормализатор?) или JMS Serializer?

LBA 07.02.2019 15:20

@LBA Я использую стандартный из PHP. class User implements JsonSerializable. Функция json_encode запускает метод jsonSerialize() моего объекта, но жаль, что вам приходится самостоятельно повторно анализировать каждое свойство/метод, а базовые коллекции не сериализуются.

b126 07.02.2019 15:57

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

LBA 07.02.2019 16:04

Ну, я не под symfony, а с codeigniter. Я посмотрю, можно ли использовать эти библиотеки. Спасибо.

b126 07.02.2019 16:32

@LBA: не было бы хорошим вариантом создать пользовательскую функцию DQL для преобразования моей даты, как определено здесь? ссылка на сайт

b126 07.02.2019 16:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
5
567
0

Другие вопросы по теме