Доктрина 2: Как расширить сущность с помощью столбца кода SQL?

У меня есть сущность

mh\BTBundle\Entity\Post:
    type: entity
    table: post
    repositoryClass: mh\BTBundle\Repository\PostRepository
    fields:
        id:
            id: true
            type: integer
            unsigned: true
            nullable: false
            generator:
                strategy: IDENTITY
        title:
            type: string
            length: 255
            nullable: false
        content:
            type: text
            nullable: false
        isModered:
            type: boolean
            nullable: false
        isPublished:
            type: boolean
            nullable: false
        pubDate:
            type: datetime
            nullable: false

и теперь один раз в 1 минуту сценария вызова cron, этот набор isPublished = true, если post имеет isModered = true и pubDate <: now.

$this->getEM()->createQueryBuilder()
            ->update('BTBundle:Post p')
            ->set('p.isPublished', 'true')
            ->where('p.pubDate < :date AND p.isModered = true')
            ->setParameter(':date', new \DateTime())
            ->getQuery()->execute();

Но я хочу определить пользовательский столбец isPublished с возвращением true, если SQL (p.pubDate < CURDATE() AND p.isModered = 1). Как я могу это сделать?

я хочу использовать

$posts = $this->getRepository('Post')->findBy(array(
            'user' => $user,
            'isPublished' => true,
        ));

вместо

$this->getEM()->createQueryBuilder()
                ->select('p')
                ->from('BTBundle:Post', 'p')
                ->where('p.isModered = true')
                ->andWhere('p.pubDate < :date')
                ->andWhere('p.user = :user')
                ->setParameter(':date', new \DateTime())
                ->setParameter(':user', $user)
                ->getQuery()->execute();

1 ответ

Самый простой способ - создать вычисляемый столбец. Ну как то так.

CREATE TABLE dbo.Example
(
    ExampleId int IDENTITY (1,1) NOT NULL,
    Value1 INT
    Value2 INT
    ComputedCol AS Value1 + Value2
);

Вы можете использовать любую допустимую логику SQL в операторе AS.

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