使用 like 运算符和动态值的查询生成器
Query Builder using the like operator and dynamic values
CakePHP 版本 3.5.5
我得到的是:
我的索引页上有搜索功能,允许用户按列和值进行搜索。用户 selects 来自 select 列表的列并将文本添加到输入中。我使用以下有效的方法获取此数据:
$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)',
我的问题:
有没有办法对 select 搜索数据使用动态值。
更新:
是不是我不能在这个上下文中将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 应要求。
我正在使用 post,我的 url 是:https://localhost/app/users/search
谢谢 Alimon,它成功了。
替换
->where(function ($exp, $q) {
和
->where(function ($exp, $q) use ($testColumn,$testInput) {
CakePHP 版本 3.5.5
我得到的是:
我的索引页上有搜索功能,允许用户按列和值进行搜索。用户 selects 来自 select 列表的列并将文本添加到输入中。我使用以下有效的方法获取此数据:
$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)',
我的问题:
有没有办法对 select 搜索数据使用动态值。
更新:
是不是我不能在这个上下文中将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 应要求。
我正在使用 post,我的 url 是:https://localhost/app/users/search
谢谢 Alimon,它成功了。
替换
->where(function ($exp, $q) {
和
->where(function ($exp, $q) use ($testColumn,$testInput) {