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,它有效。
答案 0 :(得分:1)
替换
->where(function ($exp, $q) {
与
->where(function ($exp, $q) use ($testColumn,$testInput) {