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中描述的非常相似
情况是这样的 - 我有可以进行多次测试的用户 - 关系是 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中描述的非常相似