使用Doctrine的默认条件和列

时间:2012-11-13 21:09:42

标签: php symfony doctrine

我正在使用Symfony2和Doctrine。我有很多实体(表格),这就是我想要完成的事情:

问题

每个实体都需要有2个字段(列),例如默认情况下为from_dateto_date。 假设我在product.orm.yml文件中定义了以下实体:

Some\Random\Namespace\Product:
    type: entity
    table: product
    id:
        id:
            type: integer
            generator:
                strategy: AUTO
    fields:
        name:
            type: string
            length: 255
        description:
            type: text
        price:
            type: float

在我运行doctrine:schema:update之后,创建的表应该已经有from_dateto_date列。 现在,假设我正在尝试从数据库中获取所有产品。我会这样做:

$products = $this->getDoctrine()->getRepository('SomeRandomBundle:Product')->findAll();

这通常会从数据库中获取所有产品。我想做的是,只获取from_date< = some_date< = to_date的产品。将有一个函数getSomeDate(),Doctrine必须按顺序调用,以获得some_date的值。 并不是说它也适用于用DQL编写的自定义查询,或者我也可以使用这样的

$products = $this->getDoctrine()->getRepository('SomeRandomBundle:Product')->findByPrice(20);

但是,它不应该影响这样的情况,我尝试使用find方法或自定义DQL查询通过PK来获取实体。

其他详细信息

还会有一些实体不遵守上述规则。

我知道我可以在每个实体中创建from_dateto_date并执行检查,但由于应用程序中会有数千个查询,因此只会使代码的可读性降低。

目标

上述目标是允许用户在过去的任何地方查看应用程序的状态。如果您知道可以实现相同目标的不同方法,那么它也会很棒。

感谢您的时间!

1 个答案:

答案 0 :(得分:1)

  1. 要向您的所有实体添加自定义字段,您可以

  2. 要在获取数据时进行额外检查,您还可以设置custom repository类,其中findAll / findBy使用自定义DQL并进行其他检查

  3. 要在执行DQL查询时添加其他检查,您可以指定DQL custom walkers