我想将数组传递给codeignter中活动记录的like
子句,因为我写了以下内容:
$array_string = smart,intelligent,awesome;
$array_like = explode(',',$array_string);
并在模型中:
$this->db->like('topic',array($array_like));
但我正在
Severity: Notice
Message: Array to string conversion
任何帮助或建议都会有很大的帮助。
在此处查看更新的问题: join not giving required result when using or_like codeigniter
答案 0 :(得分:6)
你不能只是将一个数组传递给like()
函数,它必须是一个字符串。您需要为字符串中的每个关键字应用like
子句。
您需要使用or_like
将记录与其中一个关键字进行匹配,但是,如果您每次只使用like()
,则需要匹配由于查询而导致的所有关键字就像LIKE "%smart" AND LIKE "%intelligent"
等,而这不是你所需要的。
$array_string = "smart,intelligent,awesome";
$array_like = explode(',', $array_string);
foreach($array_like as $key => $value) {
if($key == 0) {
$this->db->like('topic', $value);
} else {
$this->db->or_like('topic', $value);
}
}
尝试这种方法可以避免忽略where
语句的其余部分的问题。
$array_string = "smart,intelligent,awesome";
$array_like = explode(',', $array_string);
$like_statements = array();
foreach($array_like as $value) {
$like_statements[] = "topic LIKE '%" . $value . "%'";
}
$like_string = "(" . implode(' OR ', $like_statements) . ")";
$like_string
的值为(topic LIKE '%smart%' OR topic LIKE '%intelligent%' OR topic LIKE '%awesome%')
然后,您可以使用ActiveRecord以下方式使用$like_string
:
$this->db->where($like_string, FALSE);
答案 1 :(得分:0)
假设您正在使用Codeigniter 2.1.4,正如您在CodeIgniter active record documentation中所读到的那样,您不能将第二个参数作为数组传递给like函数。您需要传递一个字符串作为参数。
$array_string = "smart,intelligent,awesome";
$array_like = explode(',', $array_string);
foreach ($array_like as $like)
{
$this->db->like('topic', $like);
}