【问题标题】:CakePHP 3.x beforeFind() callback, when it fire?CakePHP 3.x beforeFind() 回调,什么时候触发?
【发布时间】:2016-09-06 12:32:10
【问题描述】:

我以这种方式为我的表使用 CakePHP beforeFind() 回调:

public function beforeFind($event, $query, $options, $primary)
{
    // if ->applyOptions(['default' => false]) not use default conditions
    if(isset($options['default']) && $options['default'] == false){
        return $query;
    }

    $query->where(['visible' => 1]);

    $query->order(['sort' => 'ASC']);

    return $query;
}

这是正确的,但是当我尝试检索我的结果时,有时它会触发,有时不会。

NO - 我认为如果我使用表注册表来获取我的表:TableRegistry::get('MyTable')->find()->first() 它不会被解雇。

YES - 如果我从同一个控制器使用$this->Pages->find()->first() 它被解雇了!

这种方式只为我工作? 还是因为 beforeFind() 被解雇了,我需要做一些额外的事情?

【问题讨论】:

  • 您确定您传递给MyTable 的字符串是正确的吗?如果名称错误,Cake 可能会为您创建一个脚手架模型。
  • 你说得对!我用单数名称BannerTable.php 而不是复数名称BannersTable.php 调用我的文件,非常感谢!我的错!

标签: cakephp orm callback cakephp-3.0


【解决方案1】:

您需要确保您的字段在查询中没有歧义。尝试在 where 查询中添加模型的名称,否则你会得到 PDOExceptions:

$query->where(['myModel.visible'=>1]);

【讨论】:

  • 是的,这也是一个很好的做法,但是@Greg Schmidt 发现了我的错误,我用错误的名称调用了文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多