我知道实体是持有数据的基本类。
,如果实体具有操纵数据的自定义功能,这是不良习惯吗?
我个人认为这种功能应该涉及其他Service
。但是在这种情况下,getNextPayroll
非常有用:
<?php
class Payroll
{
/**
* @var int
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var DateTime
*
* @ORMColumn(name="last_payroll", type="datetime", nullable = true)
*/
private $lastPayroll;
/**
* Set lastPayroll
*
* @param DateTime $lastPayroll
* @return CompanyBase
*/
public function setLastPayroll($lastPayroll)
{
$this->lastPayroll = $lastPayroll;
return $this;
}
/**
* Get lastPayroll
*
* @return DateTime
*/
public function getLastPayroll()
{
return $this->lastPayroll;
}
public function getNextPayroll()
{
$payrollNext = clone $this->getLastPayroll();
$payrollNext->add(new DateInterval("P1M"));
return $payrollNext;
}
}
下一个薪资的日期未存储在数据库中。只有上一个工资单的日期。我应该在其他服务中获得下一个工资日期,还是可以在实体中使用非理论生成的自定义函数?
这不是一个不好的做法,如果您的代码仍然满足可靠的原则(主要是单一责任,principe在这种情况下(
因此,如果该方法与实体逻辑无关(例如,向您的实体发送电子邮件或将某些内容持续到数据库( - 这是错误的。否则,绝对可以。
与实体有关的逻辑的主要属性 - 它应该在同一层中与实体中的另一件东西。
实际上,学说实体不仅是数据传输对象(没有行为(。Doctrine的开发人员坚持使用这些实体作为丰富的模型(观看Marco Pivetta的视频,Marco Pivetta是Doctrine的开发人员之一,并看到他的不错的演讲(
据我所知,只要您的实体不进入数据库层,存储库应该照顾的,那就不是不好的做法。
因此,您或多或少都可以将EntityData返回(例如您的方法返回仅修改属于实体的数据(应该在实体IT自我中可以很好。这样,您还可以轻松地使用Twig中的方法自动搜索方法名称(例如,{{ User.name }}
将搜索User->getName()
,如果找不到它,它将搜索User->name()
(
如果您重复使用此部分并想保持动态,那么创建自定义树枝扩展程序也可能是一个好主意。
我认为,只有您要做非常复杂的事情,您实际上还需要注入EntityManager并从其他可能不是通常关系的一部分的实体中检索数据。
<</p>