Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony Doctrine2:如何处理有限的一对多关系?_Php_Symfony_Doctrine Orm - Fatal编程技术网

Php Symfony Doctrine2:如何处理有限的一对多关系?

Php Symfony Doctrine2:如何处理有限的一对多关系?,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我有一个实体员工 class Employee { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\OneToMany(targetEntity="WorkHour", map

我有一个实体
员工

class Employee
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\OneToMany(targetEntity="WorkHour", mappedBy="employee", cascade={"persist", "remove"})
     */
    private $workHours;
}
工作时间

class WorkHour
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var Profile
     *
     * @ORM\ManyToOne(targetEntity="Employee", inversedBy="workHours")
     * @ORM\JoinColumn(name="employee_id", referencedColumnName="id")
     */
    protected $profile;

    /**
     * @var integer
     *
     * @ORM\Column(name="weekday", type="smallint")
     */
    private $weekday;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="hour_from", type="time")
     */
    private $hourFrom;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="hour_to", type="time")
     */
    private $hourTo;
}
现在,当我要添加
addWorkHour()
removeWorkHour()
方法时,我感到困惑

通常一对多关系您可以添加任意多的关系,但在我的情况下,一名员工最多只能有7个工作小时,并且对于指定的
工作日
(从0到6)只能有一个(或没有)记录

所以我想我需要的是一些方法

public function setWorkHourByWeekday($hour_from, $hour_to, $weekday);
public function getWorkHourByWeekday($weekday);
在为员工设定工作时间后,如果您坚持该员工, 我希望删除那些不再存在的工作时间,更新那些已更改的工作时间,并创建以前不存在的新工作时间


我如何实现这一点?我应该在类
Employee
或其
Repository
WorkHourManager
类中编写这些逻辑吗?

我的建议是不要放弃旧的工作时间,也许你现在不需要,但这些数据在将来可能有用。因此,只需为员工添加工作时间,并制作一份报告,以获取今天的最后工作时间,效果会更好。关于验证,有很多方法可以做到这一点。如果您使用的是表单,并且规则很复杂,可能需要阅读,但您可能可以在action controller或entity类本身中找到替代方法。

我认为
WorkDay
可能是实体的更好名称,因此我将使用它:)

$workHours
上设置
orbonremovation=true
,以在没有
员工的情况下删除
工时

当提供无效的工作日(0-6除外)时,
Workday
实体中的
setWeekday
方法应引发异常。您还可以将
Weekday
value对象与可嵌入对象结合使用

在这种情况下,我会去参加服务或经理课程

$workdays= $employee->getWorkDays();
$workdays->clear(); // Clear existing workdays

// Add new workdays
foreach(...) {
    $workday = new WorkDay();
    $workday ->setWeekday(0); // You could use a constant like `WorkDay::MONDAY`
    $workday ->setStart('09:00');
    $workday ->setEnd('17:00');
    $workdays->add($workday);
}