【问题标题】:Query Builder using the like operator and dynamic values使用 like 运算符和动态值的查询生成器
【发布时间】:2018-01-31 10:54:24
【问题描述】:

CakePHP 3.5.5 版

我有什么:

我的索引页面上有搜索功能,允许用户按列和值进行搜索。用户从选择列表中选择列并将文本添加到输入中。我使用以下方法获取这些数据:

$query = $Users->find()
     ->where(function ($exp, $q) {
         return $exp->like($this->request->getData('column'), $this->request->getData('input') . '%');
     })
     ->andWhere([
         'status' => $filter,
         'cid_1' => $c1
     ]);

当使用 debugKit 时,它显示的 sql 为:(仅提取帮助解释)

FROM users Users WHERE (role LIKE :c0 AND status = :c1 AND cid_1 = :c2)',

我想做的是以下几点:

$testColumn = $this->request->getData('column');          
$testInput = $this->request->getData('input');

$query = $Users->find()
    ->where(function ($exp, $q) {                    
        return $exp->like($testColumn, $testInput . '%');
    })
    ->andWhere([
        'status' => $filter,
        'cid_1' => $c1
    ]);

$testColumn 变量未定义。

当使用 debugKit 时,它显示的 sql 为:(仅提取帮助解释)

FROM users Users WHERE (LIKE :c0 AND status = :c1 AND cid_1 = :c2)',

IE:角色没有在 LIKE 之前声明。

我的尝试:

1. return $exp->like("$testColumn", "$testInput" . '%');

结果:完全一样 - 变量仍未定义。

DebugKit: FROM users Users WHERE (LIKE :c0 AND status = :c1 AND cid_1 = :c2)',

2. return $exp->like("'$testColumn'", "'$testInput'" . '%');

结果:它在 LIKE 之前添加了 '',如下所示,但我仍然无法定义该变量。

DebugKit: FROM users Users WHERE ('' LIKE :c0 AND status = :c1 AND cid_1 = :c2)',

我的问题:

有没有办法使用动态值来选择搜索数据。

更新:

是不是我无法在这种情况下将 getData 分配给变量。

你不能这样做:

$testColumn = $this->request->getData('column');
return $exp->like($testColumn, $testInput . '%');

但你可以这样做:

$testColumn = $this->request->getData('column');
echo 'testColumn is ' . $testColumn . '<br />';

if ($testColumn === 'role') {
    echo 'in column passed ' . '<br />';   
}
else {
    echo 'in column failed ' . '<br />';   
}

谢谢。 Z.

/////////////////////////////////////// /////////////////////////////

根据要求提供 Alimon Karim。

我正在使用帖子,我的网址是:https://localhost/app/users/search

感谢 Alimon,它有效。

【问题讨论】:

  • 你是用get方法还是post方法发送数据?点击搜索按钮后,您的网址是什么?

标签: cakephp-3.0 query-builder


【解决方案1】:

替换

->where(function ($exp, $q) {

->where(function ($exp, $q) use ($testColumn,$testInput) {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-05
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 2010-12-26
    相关资源
    最近更新 更多