ThinkPHP5.1复杂条件查询

浏览:4974 发布日期:2019/01/04 分类:ThinkPHP5专区
版本:ThinkPHP 5.1.32$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(); // 报错如上
最佳答案
评论( 相关
后面还有条评论,点击查看>>