1

正如标题所说,我可以'%'在 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'工作原样。

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

4

3 回答 3

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);
}
于 2013-07-25T06:52:34.790 回答
1

like在查询中尽可能多地使用。例如:

$this->db->like('title', $title, 'after')->like('page1', $page1)->like('page2', $page2, 'after')->get('table');
于 2013-07-25T06:49:14.457 回答
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);
}
于 2013-07-25T06:53:25.923 回答