cakephp3.x ORM get()、find()以及如何禁用befeoreFind()?

cakephp3.x ORM get()、find()以及如何禁用befeoreFind()?,php,cakephp,orm,cakephp-3.x,Php,Cakephp,Orm,Cakephp 3.x,我使用beforeFind()回调函数时,有一些条件必须在大多数情况下应用,但不是在所有情况下都适用。问题是关于这个 禁用beforeFind()回调的正确方法是什么 目前,我使用这种方法: 在beforeFind()中,如果默认选项为false,则返回$query if(isset($options['default']) && $options['default'] == false){ return $query; } 现在,当我执行find()操作时,我可以通过

我使用beforeFind()回调函数时,有一些条件必须在大多数情况下应用,但不是在所有情况下都适用。问题是关于这个

禁用beforeFind()回调的正确方法是什么

目前,我使用这种方法:

在beforeFind()中,如果默认选项为false,则返回$query

if(isset($options['default']) && $options['default'] == false){
    return $query;
}
现在,当我执行find()操作时,我可以通过将默认选项设置为false来禁用它

$this->Articles->find()->applyOptions(['default' => false])...
但是当我使用get()方法时,我不知道该怎么做

我可以再次使用findById()和applyOptions,但如果有其他我更喜欢的方法的话

提前谢谢

我使用beforeFind()回调函数时,有一些条件必须在大多数情况下应用,但不是在所有情况下都适用

而不是beforeFind()回调,并在那里实现您的逻辑或条件。然后你可以把它们锁起来,只有在你需要的时候才使用它们。我建议您阅读有关它们的手册部分

$this->find('all')->find('myConditions');
手册中的示例:

use Cake\ORM\Query;
use Cake\ORM\Table;

class ArticlesTable extends Table
{

    public function findOwnedBy(Query $query, array $options)
    {
        $user = $options['user'];
        return $query->where(['author_id' => $user->id]);
    }

}

// In a controller or table method.
$articles = TableRegistry::get('Articles');
$query = $articles->find('ownedBy', ['user' => $userEntity]);
我使用beforeFind()回调函数时,有一些条件必须在大多数情况下应用,但不是在所有情况下都适用

而不是beforeFind()回调,并在那里实现您的逻辑或条件。然后你可以把它们锁起来,只有在你需要的时候才使用它们。我建议您阅读有关它们的手册部分

$this->find('all')->find('myConditions');
手册中的示例:

use Cake\ORM\Query;
use Cake\ORM\Table;

class ArticlesTable extends Table
{

    public function findOwnedBy(Query $query, array $options)
    {
        $user = $options['user'];
        return $query->where(['author_id' => $user->id]);
    }

}

// In a controller or table method.
$articles = TableRegistry::get('Articles');
$query = $articles->find('ownedBy', ['user' => $userEntity]);
只用

$this->Hotels->get($id, ['default' => false]); 
$选项将被传递,您的beforeFind将继续工作:-D

只需使用

$this->Hotels->get($id, ['default' => false]); 

$options将被传递,您的beforeFind将继续工作:-D

感谢您的回答,但它没有回答以下问题:如何仅在某些find()或get()操作中禁用beforeFind()回调?如果不可能,我会使用建议的解决方案。感谢您的回答,但它不会回答以下问题:如何仅在某些find()或get()操作中禁用beforeFind()回调?如果不可能,我将使用建议的解决方案。@AD7six我如何做到这一点?@AD7six我如何做到这一点?