我已经升级到CakePHP 3.4并且我正在检查3.4弃用列表,迁移指南说必须在setMatching()之后调用 getMatching()来保持旧行为我混淆了,在setMatching()和getMatching()函数上找不到任何关于样本的文档。我应该如何或在何处声明setMatching()。任何人都可以指出我如何使用setMatching和getMatching重写下面的代码:
TableRegistry::get('Students')->find()
->distinct([ 'Students.id'])
->matching('Studentclassrooms.Classrooms',
function ($q) use ( $classid ){
return $q->where([ 'Classrooms.id' => $classid ]);
});
->enableAutoFields(true);
当我尝试以下操作时,我收到错误
未知方法“setMatching”
TableRegistry::get('Students')->find()
->distinct([ 'Students.id'])
->setMatching('Studentclassrooms.Classrooms',
function ($q) use ( $classid ){
return $q->where([ 'Classrooms.id' => $classid ]);
})
->getMatching()
->enableAutoFields(true);
答案 0 :(得分:0)
仔细查看迁移指南(目前已关闭,似乎是托管服务商的问题),\Cake\ORM\Query::matching()
未被弃用,而\Cake\ORM\EagerLoader::matching()
就是\Cake\ORM\Query::matching()
(在{ {1}}),没有\Cake\ORM\Query::setMatching()/getMatching()
种方法,只有\Cake\ORM\EagerLoader::setMatching()/getMatching()
。
必须在getMatching()
之后致电setMatching()
,因为与matching('Alias')
不同,setMatching('Alias')
将返回一个包含数组,$this
将设置匹配的内容,但返回{{ 1}}而不是。因此,为了检索准备好的包含数组,您之后必须调用getMatching()
。
长话短说,你的例子中没有任何东西需要重写。