我正在使用Symfony2和Doctrine。我有很多实体(表格),这就是我想要完成的事情:
问题
每个实体都需要有2个字段(列),例如默认情况下为from_date
和to_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_date
和to_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_date
和to_date
并执行检查,但由于应用程序中会有数千个查询,因此只会使代码的可读性降低。
目标
上述目标是允许用户在过去的任何地方查看应用程序的状态。如果您知道可以实现相同目标的不同方法,那么它也会很棒。
感谢您的时间!
答案 0 :(得分:1)
要向您的所有实体添加自定义字段,您可以
要在获取数据时进行额外检查,您还可以设置custom repository类,其中findAll / findBy使用自定义DQL并进行其他检查
要在执行DQL查询时添加其他检查,您可以指定DQL custom walkers