将数组传递给codeigniter中的活动记录

时间:2014-01-31 10:59:26

标签: php arrays codeigniter activerecord

我想将数组传递给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

2 个答案:

答案 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);
}