让我们说我在CI中有一个模型,返回用户需要的内容..
$find = 'something';
$id_user = Array ( [0] => 1 [1] => 5 [2] => 20 [3] => 21 ) ;
所以,我必须把它放在这里,但出了点问题......
public function find_pr_by_user ($find,$id_users) {
$this -> db -> where_in ('req_by_id'.$id_users || 'check_by_id',$id_users || 'approve_by_id',$id_users);
$this -> db -> where ("(ref_no LIKE '%$find%' || pr_title LIKE '%$find%' || req_date LIKE '%$find%')");
$query = $this -> db -> get ('pr_data') ;
return $query -> result () ;
}
我得到错误数组到字符串转换;我的输入来自$find
和$id_users
,可以是任何内容。我期待这个逻辑,给我表PR_DATA
的所有数组,%$find%
列ref_no
或pr_title
或req_date
但$id_users
只有req_by_id
列check_by_id
或approve_by_id
或if err := http.ListenAndServeTLS(
":443",
"domain-crt.pem",
"domain-key.pem",
Route.router,
); err != nil {
ERROR.Fatal(err)
}
中的*(1或5或20或21)。
有人可以帮忙吗?
答案 0 :(得分:2)
这个答案是假设您需要在代码中的第一个where_in()
中使用括号。
不幸的是,CodeIgniter并不完全支持使用Active Record的括号。因此,您必须使用where()
中更复杂的SQL语法。
public function find_pr_by_user ($find,$id_users) {
$id_users_glued = implode(",",$id_users);
$this->db->where('(req_by_id IN (' . $id_users_glued . ') || check_by_id IN (' . $id_users_glued . ') || approve_by_id IN (' . $id_users_glued . '))');
$this->db->where("(ref_no LIKE '%$find%' || pr_title LIKE '%$find%' || req_date LIKE '%$find%')");
$query = $this->db->get('pr_data') ;
return $query->result () ;
}
在CI的Active Record中,这就是语法的处理方式:
FIRST WHERE 将被视为:WHERE (req_by_id IN ($id_users_glued) || check_by_id IN ($id_users_glued) || approve_by_id IN ($id_users_glued)
$id_users_glued
会产生类似1,2,3,4,5
SECOND WHERE 将被视为:AND (ref_no LIKE '%$find%' || pr_title LIKE '%$find%' || req_date LIKE '%$find%')
注意:我没有测试过代码,因为我没有你的数据库结构。如果它不起作用,请告诉我。