$input = '123';
SELECT id, title FROM tableName WHERE type = 1 AND group = 0 AND (id = $input OR title LIKE '%{$input}%')
请问一下这种语句,通过链式查询等的方法应该要怎么写?主要是最后一个括号的OR条件`condition1 AND condition2 ...... AND (condition3 OR condition4)`
以下是我写的代码,但是无法正常运行,请问如果不用字符串或者手动拼接的方式,有其他办法做到吗?
<?php
$query = new Query;
if(!empty($_POST['type'])) {
$query->where('type', $_POST['type']);
}
if(!empty($_POST['group'])) {
$query->where('group', $_POST['group']);
}
if(!empty($_POST['search'])) {
// 下面这样写生成的结果类似如下:
//
// SELECT `id`, `title`
// WHERE `is_recycle` = :ThinkBind_1_
// AND `group_id` NOT IN (:ThinkBind_2_)
// AND `group_id` = :ThinkBind_3_
// AND ( id = :ThinkBind_1_ OR title LIKE :ThinkBind_2_ )
//
// 报错:SQLSTATE[HY093]: Invalid parameter number
//
// 出现了两个 `:ThinkBind_1_` 和 `:ThinkBind_2_`
//
// 似乎通常的 where 传参或数组无法与 where 的字符串条件查询同时使用,好像会冲突
$query->whereRaw('id = :id OR title LIKE :title', [
'id' => $_POST['search'],
'title' => "%{$_POST['search']}%",
]);
}
$model = new Table;
$model->where($query)->select(); // 报错如上
最佳答案
