如何使用关联数组在codeigniter中设置通配符选项?

时间:2013-07-25 06:47:28

标签: php arrays codeigniter

正如标题所说,我可以将'%'置于Codeigniter的类似查询中

$this->db->like('title', 'match', 'before');
// Produces: WHERE title LIKE '%match' 

用于关联数组

    $array = array('title' => $match, 'page1' => $match, 'page2' => $match);

    $this->db->like($array);

    // WHERE title LIKE '%match%' AND page1 LIKE '%match%' AND page2 LIKE '%match%'

为了更加清晰,我的模型具有处理大部分选择查询的功能,我发送一个数组参数来检索结果

function getTableData($table='', $fields='', $like=array(),$like1=array())
 {

    //Check For like statement
    if(is_array($like) and count($like)>0)      
        $this->db->like($like); 

    if(is_array($like1) and count($like1)>0)

        $this->db->or_like($like1); 

    //Check For Fields   
    if($fields!='')

            $this->db->select($fields);

    else        
        $this->db->select();

    $result = $this->db->get();

//pr($result->result());
    return $result;

 }  

这是我的通用功能,所以当作为参数发送或修改功能时,如何使用通配符放置默认'both'的第三个参数。

使用第三个参数i控制%的放置,但是当我使用关联数组时,如何在Codeigniter中实现通配符放置。 我怎样才能在不同列的关联数组中使用它。这可能吗?我知道我可以使用自定义查询,目前我正在使用它。如有任何帮助,请提前致谢。

3 个答案:

答案 0 :(得分:2)

我查看了核心DB_active_rec.php文件。请尝试这个:

$this->db->like($array, false, 'before');

/system/database/DB_active_rec.php第571行:

 /**
 * Like
 *
 * Generates a %LIKE% portion of the query. Separates
 * multiple calls with AND
 *
 * @param   mixed
 * @param   mixed
 * @return  object
 */
public function like($field, $match = '', $side = 'both')
{
    return $this->_like($field, $match, 'AND ', $side);
}

答案 1 :(得分:1)

在查询中使用尽可能多的like。 E.g:

$this->db->like('title', $title, 'after')->like('page1', $page1)->like('page2', $page2, 'after')->get('table');

答案 2 :(得分:0)

您可以多次使用like():

$this->db->like('title', 'match');
$this->db->like('page1', 'match');
$this->db->like('page2', 'match');

或者如果PHP> 5使用链式:

$this->db->like('title', 'match')->like('page1', 'match')->like('page2', 'match');

如果你有一个值数组,请使用foreach():

//considering $like = array('field' => 'value', 'field2' => 'value2');
foreach ($like as $field=> $value)
{
    $this->db->like($field, $value);
}