Cakephp 3.4 - setMatching()和getMatching()的用法

时间:2017-02-21 03:36:15

标签: cakephp cakephp-3.4

我已经升级到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);

1 个答案:

答案 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()

长话短说,你的例子中没有任何东西需要重写。