CakePHP:多个hasOne模型关系

CakePHP:多个hasOne模型关系,cakephp,model,relationship,Cakephp,Model,Relationship,我正在尝试创建一个应用程序,该应用程序将根据员工或志愿者的可用性,以不定期的时间表将工作分配给他们 总之,以下是我的模型以及它们之间的关系: Users hasMany Jobs Jobs belongTo Users Users hasMany Availabilities Availabilities belongTo Users Jobs hasOne Periods Periods belongTo Jobs Availabilities hasOne Periods Periods b

我正在尝试创建一个应用程序,该应用程序将根据员工或志愿者的可用性,以不定期的时间表将工作分配给他们

总之,以下是我的模型以及它们之间的关系:

Users hasMany Jobs
Jobs belongTo Users
Users hasMany Availabilities
Availabilities belongTo Users
Jobs hasOne Periods
Periods belongTo Jobs
Availabilities hasOne Periods
Periods belongTo Availabilities
问题是,句点位于两个hasOne关系的接收端,如果我没有错的话,这是CakePHP中无法做到的。在这种情况下,最好的方法是什么

您可能还发现了这样一个事实:一个作业可能被分配给某个用户,也可能不是用户。我应该放弃关系并在分配作业后创建它,还是应该为未分配的作业创建一个虚拟用户来代表任何人

我本来会贴一张很好的图片,但我没有足够的声誉,对不起! 但这里有一个例子

问题是,句点位于两个hasOne关系的接收端,如果我没有错的话,这是CakePHP中无法做到的。在这种情况下,最好的方法是什么

我看没问题。您应该能够将每个hasOne关系的外键添加到periods表periods.job\u id和periods.availability\u id中

您可能还发现了这样一个事实:一个作业可能被分配给某个用户,也可能不是用户。我应该放弃关系并在分配作业后创建它,还是应该为未分配的作业创建一个虚拟用户来代表任何人

这很好。只需将jobs.user_id设置为允许空值并设置关系。这将允许在不分配给用户的情况下创建作业。执行查找后,可以检查空$results['User'],以确定是否正在处理未分配的作业

用户有许多作业,作业属于用户

只是提醒一下:模型名称应该是单数的,即用户有很多作业,作业属于用户,等等

此外,我希望有一段时间属于某个工作或某个职位,而不是同时属于这两个职位。有没有常规的方法

您可以在周期模型中为其编写验证:

$validate = array(
    'job_id' => array(
        array(
            'rule' => 'validBelongsTo',
            'message' => 'A period can either belong to a job or an availability'
        ),
    ),
);

public function validBelongsTo() {
    $hasJob          = !empty($this->data['Period']['job_id']);
    $hasAvailability = !empty($this->data['Period']['availability_id']);
    if ($hasJob && $hasAvailability) {
        return false;
    } else {
        return true;
    }
}
在我看来,周期模型应该是多态的。在面包房查看和的答案


我经常使用这项技术,它在这种情况下效果非常好。

感谢您快速的回答!我忘了提到我在CakePHP是一个彻头彻尾的noob,因此我没有意识到,例如,job.user_id可以包含空值。。。此外,我希望有一段时间可以属于某个工作或某个职位,而不是同时属于这两个职位。有没有常规的方法?无论如何,谢谢你的时间,我马上就去试试!谢谢你的回答!这听起来正是我需要的。唯一的问题是,我还不是很熟悉的行为,更不用说安装一个。。。所以我想我会坚持使用更容易理解的解决方案,而不是你的不是更好的。只是我现在缺乏知识。。。干杯