使用like运算符和动态值

时间:2018-01-31 10:54:25

标签: cakephp-3.0 query-builder

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用户WHERE(角色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用户WHERE(LIKE:c0 AND status =:c1 AND cid_1 =:c2)',

IE:该角色未在LIKE之前声明。

我尝试过的事情:

1。返回$ exp->喜欢(" $ testColumn"," $ testInput"。'%') ;

结果:完全相同 - 变量仍未定义。

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

2。返回$ exp->喜欢("' $ testColumn'","' $ testInput&#39 ;"。'%');

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

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

我的问题:

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

更新

是否我无法在此上下文中将getData分配给变量。

你不能这样做:

$ testColumn = $ this-> request-> getData(' column');
返回$ exp->喜欢($ 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 />';   
}

感谢。 ž。

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

Alimon Karim的要求。

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

感谢Alimon,它有效。

1 个答案:

答案 0 :(得分:1)

替换

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

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