sql - 学说 2 : How can extend entity with sql code column?

标签 sql doctrine-orm native-sql customcolumn

我有实体

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 调用脚本,如果帖子有 isModered = true 和 pubDate < :now,则设置 isPublished = true。

$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,如果 SQL (p.pubDate < CURDATE() AND p.isModered = 1) 则返回 true。我怎样才能做到?

我想用

$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();

最佳答案

最简单的方法是创建一个计算 column .所以像这样。

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

您可以在 AS 语句中使用任何有效的 SQL 逻辑。

关于sql - 学说 2 : How can extend entity with sql code column?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13218693/

相关文章:

jpa-2.0 - 一个人什么时候应该在JPA 2.0而不是JPQL或CriteriaBuilder上使用 native 查询?

java - QueryDSL 使用 native SQL 连接和子查询

sql - 查询、 native 查询、命名查询和类型化查询之间的区别

doctrine-orm - 教义中的关系 2

php - 如何在 Doctrine 2 中公开字段 "break lazy loading"?

mysql - 如何比较 WHERE 中的两个数组?

sql - 如何发送表作为参数?

php - 如何使用 Oracle SQL 查询先按数字排序?

sql - 为每个用户选择最大记录

sql - 根据多个属性定义 SQL 约束