1

タイトルが'%'示すように、Codeigniter の like クエリに配置できます

$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;

 }  

これは私の一般的な関数なので、パラメーターとして送信するか、関数を変更することによって、ワイルドカードを使用して3番目のパラメーターを配置し、デフォルトでそのまま機能'both'させることができます.

3 番目のパラメーターを使用して の配置を制御し%ますが、連想配列を使用する場合、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 に答える
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 に答える