(这不是我认为这是不可能的,但我不能看到这样做的方法,而不是在PHP和Doctrine中基本上表达一些代码,以通过任何一种方法获得相同的结果)
我有一个Doctrine Entity,其中有许多属性映射到DB中的列。使用这些属性,我可以计算更高级别的状态,例如,对象是活动的(如果它是在24小时前创建或已经付费),并且过去有一个开始日期。 e.g。
class ExampleEntity {
//An incomplete example!
private $createDate;
private $startDate;
private $paid;
public isActive($now) {
return ($this->IsDateRecent($this->createDate) || $this->paid) && $this->startDate < $now;
}
//... etc
}
我显然可以将该逻辑转换为Doctrine等价物,以允许我执行仅返回Active实体的查询。但是,如果我想以任何一种方式做到这一点,我需要保持PHP逻辑和Doctrine等价,这是额外的工作,并引入了缺陷的可能性。
有没有办法以某种方式编写逻辑,只需要写一次?如果做不到这一点,怎么能组织起来以减少额外的努力,以及这两种方法以某种方式分歧的可能性?例如,我可以想象以某种方式放置PHP代码和一些等效代码,这些代码会向QueryBuilder彼此相邻添加额外的子句,因此即使仍然有两个实现它们至少非常接近并且可以被验证为相当简单。