Cakephp3 从 hasMany 关联中检索匹配或不存在

Cakephp3 retrieving matching or not exists from hasMany association

情况是这样的 - 我有可以进行多次测试的用户 - 关系是 users hasMany tests。现在,我需要写一个 select 来检索所有拥有 status = 1 蚂蚁的用户,这些用户要么没有参加任何考试,要么他们的考试是在六个月前参加的。我写的第一部分是这样的:

$users = $this->Users->find('all')
    ->where(['Users.status' => 1])
    ->matching('Tests', function($q) {
        return $q
            ->where(['Tests.created <' => new \DateTime('-6 months')]);
       });

知道如何添加第二位吗?

你的问题不是很清楚,但似乎你只是不想要在过去 6 个月内至少参加过一次考试的学生

在这种情况下,我认为 notMatching 应该可以胜任

$users = $this->Users->find('all')
    ->where(['Users.status' => 1])
    ->notMatching('Tests', function($q) {
        return $q
            ->where(['Tests.created >=' => new \DateTime('-6 months')]);
    });

您的情况与食谱here中描述的非常相似