Cakephp 3 -在beforefind中获取字段和条件

isr3a4wc  于 2022-11-11  发布在  PHP
关注(0)|答案(2)|浏览(159)

在cakephp 2.x的beforeFind中,我可以检查!empty($queryData['conditions'][$this->alias.'.field'])是否设置了某个条件,或者得到$queryData['fields']可以简单检索的字段列表。
在查找前

public function beforeFind(Event $event, Query $query, $options, $primary)
{
}

options为空,$query我可以通过$query->where(...)添加条件,但如何检查哪些字段设置为检索,哪些条件已经应用?
谢谢

bqjvbblv

bqjvbblv1#

摘自CakePHP 3.0 API文档:

traverse( callable $visitor , array $parts [] )

将遍历每个指定的部分。遍历函数可以使用闭包变量或示例变量中的变量聚合结果。此函数通常用作遍历将用于构造查询的所有查询部分的方法。
回调将接收2个参数,第一个参数是正在迭代的查询部件的值,第二个参数是此类部件的名称。
示例:

$query->select(['title'])->from('articles')->traverse(function ($value, $clause) {
    if ($clause === 'select') {
        var_dump($value);
    }
}, ['select', 'from']);

所以只需要调用$query-〉traverset()并提供回调闭包,然后在其中进行检查。

vkc1a9a2

vkc1a9a22#

谢谢你的提示,但方法“遍历”在第4版我已经没有这样的工作。我看了看它在蛋糕核心:

public function beforeFind($event, $query, $options, $primary)
{
    $query
        ->clause('where')
        ->iterateParts(function ($callable) use (&$params): void {
            if ($callable->getField() === 'url') {
                // do something
            }
            $params[] = [
                $callable->getField() . ' ' . $callable->getOperator() => $callable->getValue()
            ];
        });

    $query->where($params);
}

相关问题