クエリビルダクラス

CodeIgniter はクエリビルダクラスへのアクセスを提供しています。このパターンは最小の記述でデータベースからのデータ取得、insert、updateを可能にします。In some cases, only one or two lines of code are necessary to perform a database action. CodeIgniter ではデータベースのテーブルごとにクラスファイルを用意する必要はありません。その代わり、より単純化されたインターフェースを提供します。

単純性を超えたところに、クエリビルダ機能を使うことによる主たる利便性があります。データベースに依存しないアプリケーションを作ることができるのです。クエリの構文はそれぞれのデータベースアダプタにより生成されるからです。また、より安全なクエリになります。システムにより自動的に値がエスケープされるからです。

クエリビルダのロード

クエリビルダはデータベース接続の table() メソッドを通じて読み込まれます。これはクエリの FROM 句を設定し、クエリビルダクラスの新しいインスタンスを返します:

$db      = \Config\Database::connect();
$builder = $db->table('users');

クラスのリクエストを記述した時点ではクエリビルダはメモリに読み込まれるだけであり、デフォルトでは何のリソースも利用しません。

データの select

つぎのメソッドは SQL の SELECT 文を生成します。

$builder->get()

select クエリを実行し、結果を返します。このメソッドだけでテーブルからすべてのレコードを取得できます:

$builder = $db->table('mytable');
$query   = $builder->get();  // Produces: SELECT * FROM mytable

第1引数、第2引数で limit 句と offset 句を設定できます:

$query = $builder->get(10, 20);

// 実行: SELECT * FROM mytable LIMIT 20, 10
// (これは MySQL の例です。他のデータベースではすこし異なる構文になります)

上の $query に割り当てられたものは結果を表すものであることに注意してください:

$query = $builder->get();

foreach ($query->getResult() as $row)
{
        echo $row->title;
}

結果生成についての説明は 結果メソッド ページをご覧ください。

$builder->getCompiledSelect()

まさに $builder->get() のような select クエリを生成しますが、クエリの 実行 はしません。このメソッドは単に SQL クエリを文字列として返します。

例:

$sql = $builder->getCompiledSelect();
echo $sql;

// 文字列の表示: SELECT * FROM mytable

第1引数ではクエリビルダをリセットするかどうかを指定します(デフォルトではリセットします。まさに $builder->get() を利用したときと同じようなものです):

echo $builder->limit(10,20)->getCompiledSelect(false);

// 文字列の表示: SELECT * FROM mytable LIMIT 20, 10
// (in MySQL. 他のデータベースではすこし異なる構文になります)

echo $builder->select('title, content, date')->getCompiledSelect();

// 文字列の表示: SELECT title, content, date FROM mytable LIMIT 20, 10

この例で重要なことは、2つ目のクエリでは $builder->from() を使用しておらず、テーブル名を第1引数に渡していないことです。この結果となる理由は、クエリが $builder->get() の利用によりリセットされておらず、また、直接 $builder->resetQuery() を利用してリセットしていないからです。

$builder->getWhere()

get() メソッドとの違いは第1引数に "where" 句を取れることであり、db->where() メソッドの代替になります:

$query = $builder->getWhere(['id' => $id], $limit, $offset);

Please read about the where function below for more information.

$builder->select()

クエリの SELECT 句を記述できます:

$builder->select('title, content, date');
$query = $builder->get();

// 実行: SELECT title, content, date FROM mytable

注釈

テーブルからすべて (*) を select する場合、このメソッドは不要です。省略したとき、CodeIgniter はすべてのフィールドを select すると仮定して自動的に 'SELECT *' を書き加えます。

$builder->select() にはオプションの第2引数があります。FALSE にすると、CodeIgniter はフィールド名とテーブル名の保護を行いません。 自動エスケープで破壊されてしまうような複合的な select 文で便利です。

$builder->select('(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4) AS amount_paid', FALSE);
$query = $builder->get();

$builder->selectMax()

SELECT MAX(field) 句をクエリに書き加えます。オプションの第2引数で結果フィールドの名前を変えられます。

$builder->selectMax('age');
$query = $builder->get();  // 生成: SELECT MAX(age) as age FROM mytable

$builder->selectMax('age', 'member_age');
$query = $builder->get(); // 生成: SELECT MAX(age) as member_age FROM mytable

$builder->selectMin()

SELECT MIN(field) 句をクエリに書き加えます。selectMax() のように、オプションの第2引数で結果フィールドの名前を変えられます。

$builder->selectMin('age');
$query = $builder->get(); // 生成: SELECT MIN(age) as age FROM mytable

$builder->selectAvg()

SELECT AVG(field) 句をクエリに書き加えます。selectMax() のように、オプションの第2引数で結果フィールドの名前を変えられます。

$builder->selectAvg('age');
$query = $builder->get(); // 生成: SELECT AVG(age) as age FROM mytable

$builder->selectSum()

SELECT SUM(field) 句をクエリに書き加えます。selectMax() のように、オプションの第2引数で結果フィールドの名前を変えられます。

$builder->selectSum('age');
$query = $builder->get(); // 生成: SELECT SUM(age) as age FROM mytable

$builder->from()

FROM 句をクエリに書くことができます:

$builder->select('title, content, date');
$builder->from('mytable');
$query = $builder->get();  // 生成: SELECT title, content, date FROM mytable

注釈

先に書きましたように、FROM 句は $db->table() でも指定できます。追加で from() を呼び出すと、クエリの FROM 句にテーブルを追加します。

$builder->join()

クエリの JOIN 句を記述できます:

$builder->db->table('blog');
$builder->select('*');
$builder->join('comments', 'comments.id = blogs.id');
$query = $builder->get();

// Produces:
// SELECT * FROM blogs JOIN comments ON comments.id = blogs.id

1つのクエリにいくつか join したい場合は、複数回のメソッド呼び出しができます。

JOIN の方式を指定する必要があれば、メソッドの第3引数で指定できます。選択肢は: left、right、outer、inner、left outer、right outerです。

$builder->join('comments', 'comments.id = blogs.id', 'left');
// 生成: LEFT JOIN comments ON comments.id = blogs.id

指定データの検索

$builder->where()

このメソッドでは4種類の方法で WHERE 句を設定できます:

注釈

このメソッドに渡される値はすべて自動的にエスケープされ、より安全なクエリを実行します。

  1. 単純な key/value の方法:

    $builder->where('name', $name); // 生成: WHERE name = 'Joe'
    

    等号が加わることに気をつけてください。

    複数回メソッドを呼び出すと、AND でつなげます:

    $builder->where('name', $name);
    $builder->where('title', $title);
    $builder->where('status', $status);
    // WHERE name = 'Joe' AND title = 'boss' AND status = 'active'
    
  2. カスタムした key/value の方法:

    第1引数には比較演算子を含めることができます:

    $builder->where('name !=', $name);
    $builder->where('id <', $id); // 生成: WHERE name != 'Joe' AND id < 45
    
  3. 連想配列の方法:

    $array = ['name' => $name, 'title' => $title, 'status' => $status];
    $builder->where($array);
    // 生成: WHERE name = 'Joe' AND title = 'boss' AND status = 'active'
    

    同様に演算子を含めることができます:

    $array = ['name !=' => $name, 'id <' => $id, 'date >' => $date];
    $builder->where($array);
    
  4. カスタムした文字列:

    手動で独自の句を書くことができます:

    $where = "name='Joe' AND status='boss' OR status='active'";
    $builder->where($where);
    

$builder->where() はオプションで第3引数を指定できます。FALSE にすると、CodeIgniter はフィールド名とテーブル名の保護を行いません。

$builder->where('MATCH (field) AGAINST ("value")', NULL, FALSE);

$builder->orWhere()

このメソッドが上記と異なる点は、複数回呼び出しを OR でつなげることです:

$builder->where('name !=', $name);
$builder->orWhere('id >', $id);  // 生成: WHERE name != 'Joe' OR id > 50

$builder->whereIn()

IN ('item', 'item') での WHERE 句を生成し、必要に応じて AND でつなげます

$names = ['Frank', 'Todd', 'James'];
$builder->whereIn('username', $names);
// Produces: WHERE username IN ('Frank', 'Todd', 'James')

$builder->orWhereIn()

IN ('item', 'item') での WHERE 句を生成し、必要に応じて OR でつなげます

$names = ['Frank', 'Todd', 'James'];
$builder->orWhereIn('username', $names);
// Produces: OR username IN ('Frank', 'Todd', 'James')

$builder->whereNotIn()

NOT IN ('item', 'item') での WHERE 句を生成し、必要に応じて AND でつなげます

$names = ['Frank', 'Todd', 'James'];
$builder->whereNotIn('username', $names);
// Produces: WHERE username NOT IN ('Frank', 'Todd', 'James')

$builder->orWhereNotIn()

NOT IN ('item', 'item') での WHERE 句を生成し、必要に応じて OR でつなげます

$names = ['Frank', 'Todd', 'James'];
$builder->orWhereNotIn('username', $names);
// Produces: OR username NOT IN ('Frank', 'Todd', 'James')

類似データの検索

$builder->like()

このメソッドは LIKE 句を生成します。検索に便利です。

注釈

このメソッドに渡されるすべての値は自動的にエスケープされます。

注釈

All like* method variations can be forced to perform case-insensitive searches by passing a fifth parameter of true to the method. これにはプラットフォーム依存の機能があれば利用しますが、さもなくば強制的に値を小文字にします。例: WHERE LOWER(column) LIKE '%search%'。これに対してインデックスを活用するには column のかわりに LOWER(column) が必要になるかもしれません。

  1. 単純な key/value の方法:

    $builder->like('title', 'match');
    // 生成: WHERE `title` LIKE '%match%' ESCAPE '!'
    

    複数回メソッドを呼び出すと、AND でつなげます:

    $builder->like('title', 'match');
    $builder->like('body', 'match');
    // WHERE `title` LIKE '%match%' ESCAPE '!' AND  `body` LIKE '%match% ESCAPE '!'
    

    ワイルドカード(%)を配置したい場合、オプションの第3引数を使います。選択肢は 'before'、'after'、'both'(デフォルト)です。

    $builder->like('title', 'match', 'before');     // 生成: WHERE `title` LIKE '%match' ESCAPE '!'
    $builder->like('title', 'match', 'after');      // 生成: WHERE `title` LIKE 'match%' ESCAPE '!'
    $builder->like('title', 'match', 'both');       // 生成: WHERE `title` LIKE '%match%' ESCAPE '!'
    
  2. 連想配列の方法:

    $array = ['title' => $match, 'page1' => $match, 'page2' => $match];
    $builder->like($array);
    // WHERE `title` LIKE '%match%' ESCAPE '!' AND  `page1` LIKE '%match%' ESCAPE '!' AND  `page2` LIKE '%match%' ESCAPE '!'
    

$builder->orLike()

このメソッドが上記と異なる点は、複数回呼び出しを OR でつなげることです:

$builder->like('title', 'match'); $builder->orLike('body', $match);
// WHERE `title` LIKE '%match%' ESCAPE '!' OR  `body` LIKE '%match%' ESCAPE '!'

$builder->notLike()

このメソッドが like() と異なる点は、NOT LIKE 文を生成することです:

$builder->notLike('title', 'match');    // WHERE `title` NOT LIKE '%match% ESCAPE '!'

$builder->orNotLike()

このメソッドが notLike() と異なる点は、複数回呼び出しを OR でつなけることです:

$builder->like('title', 'match');
$builder->orNotLike('body', 'match');
// WHERE `title` LIKE '%match% OR  `body` NOT LIKE '%match%' ESCAPE '!'

$builder->groupBy()

クエリの GROUP BY 句を記述できます:

$builder->groupBy("title"); // 生成: GROUP BY title

複数の値を配列で渡すこともできます:

$builder->groupBy(["title", "date"]);  // Produces: GROUP BY title, date

$builder->distinct()

クエリに "DISTINCT" キーワードを追加します

$builder->distinct();
$builder->get(); // 生成: SELECT DISTINCT * FROM mytable

$builder->having()

HAVING 句をクエリに書くことができます。2種類の構文、引数を1つないし2つ書くことができます:

$builder->having('user_id = 45');  // 生成: HAVING user_id = 45
$builder->having('user_id',  45);  // 生成: HAVING user_id = 45

複数の値を配列で渡すこともできます:

$builder->having(['title =' => 'My Title', 'id <' => $id]);
// 生成: HAVING title = 'My Title', id < 45

CodeIgniter によってクエリをエスケープするデータベースを使用している場合、オプションの第3引数に FALSE を設定することにより、エスケープをさせないでおくことができます。

$builder->having('user_id',  45);  // 生成: HAVING `user_id` = 45 in some databases such as MySQL
$builder->having('user_id',  45, FALSE);  // 生成: HAVING user_id = 45

$builder->orHaving()

having() と異なる点は、複数の句を "OR" で分割することです。

結果の並び替え

$builder->orderBy()

ORDER BY 句を設定します。

第1引数には order by したいカラム名を指定します。

第2引数には向きを指定します。 選択肢は ASCDESCRANDOM です。

$builder->orderBy('title', 'DESC');
// 生成: ORDER BY `title` DESC

第1引数には自分で文字列を指定することもできます:

$builder->orderBy('title DESC, name ASC');
// 生成: ORDER BY `title` DESC, `name` ASC

複数フィールドの指定が必要であれば、複数回のメソッド呼び出しもできます。

$builder->orderBy('title', 'DESC');
$builder->orderBy('name', 'ASC');
// 生成: ORDER BY `title` DESC, `name` ASC

向きのオプションに RANDOM を選ぶと、数値を指定しない限り第1引数は無視されます。

$builder->orderBy('title', 'RANDOM');
// 生成: ORDER BY RAND()

$builder->orderBy(42, 'RANDOM');
// 生成: ORDER BY RAND(42)

注釈

Random 順は現在のところ Oracle ではサポートされておらず、代わりにデフォルトの ASC が使用されます。

結果の Limit と Count

$builder->limit()

クエリが返す結果行数を制限できます:

$builder->limit(10);  // 生成: LIMIT 10

第2引数は offset を指定できます。

$builder->limit(10, 20);  // 生成: LIMIT 20, 10 (これは MySQL の例です。他のデータベースではすこし異なる構文になります)

$builder->countAllResults()

Permits you to determine the number of rows in a particular Query Builder query. クエリは Query Builder での制約、つまり where()orWhere()like()orLike() などを許可します。例:

echo $builder->countAllResults();  // Produces an integer, like 25
$builder->like('title', 'match');
$builder->from('my_table');
echo $builder->countAllResults(); // Produces an integer, like 17

しかしながら、このメソッドは select() に渡したすべての値をリセットします。If you need to keep them, you can pass FALSE as the first parameter.

echo $builder->countAllResults(false); // Produces an integer, like 17

$builder->countAll()

特定のテーブルの行数を判定します。 例:

echo $builder->countAll();  // Produces an integer, like 25

As is in countAllResult method, this method resets any field values that you may have passed to select() as well. If you need to keep them, you can pass FALSE as the first parameter.

クエリのグルーピング

クエリのグルーピングは WHERE 句をカッコでくくったグループを作成できます。これにより複雑な WHERE 句を作成できます。ネストしたグループもサポートされています。例:

$builder->select('*')->from('my_table')
        ->groupStart()
                ->where('a', 'a')
                ->orGroupStart()
                        ->where('b', 'b')
                        ->where('c', 'c')
                ->groupEnd()
        ->groupEnd()
        ->where('d', 'd')
->get();

// 生成:
// SELECT * FROM (`my_table`) WHERE ( `a` = 'a' OR ( `b` = 'b' AND `c` = 'c' ) ) AND `d` = 'd'

注釈

groups need to be balanced, make sure every groupStart() is matched by a groupEnd().

$builder->groupStart()

クエリの WHERE 句に開きカッコで新しいグループを始めます。

$builder->orGroupStart()

クエリの WHERE 句に開きカッコで新しいグループを始めますが、'OR' の前置詞をつけます。

$builder->notGroupStart()

クエリの WHERE 句に開きカッコで新しいグループを始めますが、'NOT' の前置詞をつけます。

$builder->orNotGroupStart()

クエリの WHERE 句に開きカッコで新しいグループを始めますが、'OR NOT' の前置詞をつけます。

$builder->groupEnd()

Ends the current group by adding a closing parenthesis to the WHERE clause of the query.

データの挿入

$builder->insert()

与えられたデータから insert 文字列を生成し、クエリを実行します。配列 または オブジェクト のどちらでも渡せます。ここに配列を使った例を示します:

$data = [
        'title' => 'My title',
        'name'  => 'My Name',
        'date'  => 'My date'
];

$builder->insert($data);
// 生成: INSERT INTO mytable (title, name, date) VALUES ('わたしのタイトル', 'わたしの名前', 'わたしの日付')

第1引数は値の連想配列です。

ここにオブジェクトを使った例を示します:

/*
class Myclass {
        public $title   = 'My Title';
        public $content = 'My Content';
        public $date    = 'My Date';
}
*/

$object = new Myclass;
$builder->insert($object);
// 生成: INSERT INTO mytable (title, content, date) VALUES ('わたしのタイトル', 'わたしのコンテンツ', 'わたしの日付')

The first parameter is an object.

注釈

すべての値は自動的にエスケープされ、より安全なクエリが提供されます。

$builder->getCompiledInsert()

まさに $builder->insert() のような insert クエリを生成しますが、クエリの 実行 はしません。このメソッドは単に SQL クエリを文字列として返します。

例:

$data = [
        'title' => 'My title',
        'name'  => 'My Name',
        'date'  => 'My date'
];

$sql = $builder->set($data)->getCompiledInsert('mytable');
echo $sql;

// 生成文字列: INSERT INTO mytable (`title`, `name`, `date`) VALUES ('わたしのタイトル', 'わたしの名前', 'わたしの日付')

第2引数ではクエリビルダのクエリをリセットするかどうかを指定できます(デフォルトではリセットします――まったく $builder->insert() のようにします):

echo $builder->set('title', 'わたしのタイトル')->getCompiledInsert('mytable', FALSE);

// 生成文字列: INSERT INTO mytable (`title`) VALUES ('わたしのタイトル')

echo $builder->set('content', 'わたしのコンテンツ')->getCompiledInsert();

// 生成文字列: INSERT INTO mytable (`title`, `content`) VALUES ('わたしのタイトル', 'わたしのコンテンツ')

The key thing to notice in the above example is that the second query did not utilize $builder->from() nor did it pass a table name into the first parameter. The reason this worked is that the query has not been executed using $builder->insert() which resets values or reset directly using $builder->resetQuery().

注釈

このメソッドはバッチインサートでは動きません。

$builder->insertBatch()

与えられたデータから insert 文字列を生成し、クエリを実行します。配列 または オブジェクト のどちらでも渡せます。ここに配列を使った例を示します:

$data = [
        [
                'title' => 'My title',
                'name'  => 'My Name',
                'date'  => 'My date'
        ],
        [
                'title' => 'Another title',
                'name'  => 'Another Name',
                'date'  => 'Another date'
        ]
];

$builder->insertBatch($data);
// 生成: INSERT INTO mytable (title, name, date) VALUES ('わたしのタイトル', 'わたしの名前', 'わたしの日付'),  ('別のタイトル', '別の名前', '別の日付')

第1引数は値の連想配列です。

注釈

すべての値は自動的にエスケープされ、より安全なクエリが提供されます。

データの更新

$builder->replace()

このメソッド REPLACE 文を実行します。基本的に SQL 標準の DELETE(オプション) + INSERT で構成され、主キー かつ ユニーク なキーを判断要素として用います。 我々の場合、これは select()update()delete()insert() の呼び出しを組み合わせた複雑なロジックを実装する手間をなくしてくれます。

例:

$data = [
        'title' => 'My title',
        'name'  => 'My Name',
        'date'  => 'My date'
];

$builder->replace($data);

// 実行: REPLACE INTO mytable (title, name, date) VALUES ('わたしのタイトル', 'わたしの名前', 'わたしの日付')

上の例では、title フィールドを主キーと仮定するなら、そして 'わたしのタイトル' を title 値として含むならその行は削除され新しいデータで置き換えられます。

set() メソッドの利用も可能です。insert()` と同じように、すべてのフィールドは自動的にエスケープされます。

$builder->set()

このメソッドは insert または update の値を設定できます。

insert または update メソッドに直接配列を渡す代わりとして使えます:

$builder->set('name', $name);
$builder->insert();  // 生成: INSERT INTO mytable (`name`) VALUES ('{$name}')

複数回メソッドを呼び出した場合、insert または update の実行のどちらでも正しく組み上げられます:

$builder->set('name', $name);
$builder->set('title', $title);
$builder->set('status', $status);
$builder->insert();

また、set() はオプションの第3引数($escape)を受け付けます。FALSE の場合にはエスケープをさせません。違いを説明するため、ここに set() のエスケープを利用したものとしなかったものを示します

$builder->set('field', 'field+1', FALSE);
$builder->where('id', 2);
$builder->update(); // gives UPDATE mytable SET field = field+1 WHERE `id` = 2

$builder->set('field', 'field+1');
$builder->where('id', 2);
$builder->update(); // これは UPDATE `mytable` SET `field` = 'field+1' WHERE `id` = 2

このメソッドには連想配列も渡せます:

$array = [
        'name'   => $name,
        'title'  => $title,
        'status' => $status
];

$builder->set($array);
$builder->insert();

もしくはオブジェクトで:

/*
class Myclass {
        public $title   = 'My Title';
        public $content = 'My Content';
        public $date    = 'My Date';
}
*/

$object = new Myclass;
$builder->set($object);
$builder->insert();

$builder->update()

与えられたデータから update 文字列を生成します。配列 または オブジェクト をメソッドに渡せます。ここに配列を使った例を示します:

$data = [
        'title' => $title,
        'name'  => $name,
        'date'  => $date
];

$builder->where('id', $id);
$builder->update($data);
// 生成:
//
//      UPDATE mytable
//      SET title = '{$title}', name = '{$name}', date = '{$date}'
//      WHERE id = $id

また、オブジェクトも渡せます:

/*
class Myclass {
        public $title   = 'My Title';
        public $content = 'My Content';
        public $date    = 'My Date';
}
*/

$object = new Myclass;
$builder->where('id', $id);
$builder->update($object);
// 生成:
//
// UPDATE `mytable`
// SET `title` = '{$title}', `name` = '{$name}', `date` = '{$date}'
// WHERE id = `$id`

注釈

すべての値は自動的にエスケープされ、より安全なクエリが提供されます。

$builder->where() メソッドを使うことで WHERE 句を設定できることに注意してください。この方法は直接 update メソッドに文字列として渡すこともオプションで可能です:

$builder->update($data, "id = 4");

もしくは配列として:

$builder->update($data, ['id' => $id]);

また、update は上で説明した $builder->set() メソッドを使うこともできます。

$builder->updateBatch()

与えられたデータから update 文字列を生成し、クエリを実行します。 配列 または オブジェクト のどちらでも渡せます。 ここに配列を使った例を示します:

$data = [
   [
      'title' => 'My title' ,
      'name'  => 'My Name 2' ,
      'date'  => 'My date 2'
   ],
   [
      'title' => 'Another title' ,
      'name'  => 'Another Name 2' ,
      'date'  => 'Another date 2'
   ]
];

$builder->updateBatch($data, 'title');

// Produces:
// UPDATE `mytable` SET `name` = CASE
// WHEN `title` = 'わたしのタイトル' THEN 'わたしの名前 2'
// WHEN `title` = '別のタイトル' THEN '別の名前 2'
// ELSE `name` END,
// `date` = CASE
// WHEN `title` = 'わたしのタイトル' THEN 'わたしの日付 2'
// WHEN `title` = '別のタイトル' THEN '別の日付 2'
// ELSE `date` END
// WHERE `title` IN ('わたしのタイトル','別のタイトル')

第1引数は値の連想配列で、第2引数は where のキーです。

注釈

すべての値は自動的にエスケープされ、より安全なクエリが提供されます。

注釈

affectedRows() はこのメソッドでの結果を取得できません。それの単純素朴な操作のせいです。代わりに、updateBatch() は影響のあった行数を返します。

$builder->getCompiledUpdate()

これは $builder->getCompiledInsert() とまったく同じ方法で動作しますが、異なる点は INSERT 文ではなく UPDATE 文を返すところです。

詳しくは $builder->getCompiledInsert() のドキュメントをご覧ください。

注釈

このメソッドはバッチアップデートでは動きません。

データの削除

$builder->delete()

DELETE 文を生成し、クエリを実行します。

$builder->delete(['id' => $id]);  // Produces: // DELETE FROM mytable  // WHERE id = $id

The first parameter is the where clause. You can also use the where() or or_where() functions instead of passing the data to the first parameter of the function:

$builder->where('id', $id);
$builder->delete();

// 生成:
// DELETE FROM mytable
// WHERE id = $id

もしテーブルのデータすべてを削除したいなら、truncate() メソッドまたは empty_table() が使えます。

$builder->emptyTable()

DELETE 文を生成し、クエリを実行します:

$builder->emptyTable('mytable'); // 生成: DELETE FROM mytable

$builder->truncate()

truncate 文を生成し、クエリを実行します。

$builder->truncate();

// 生成:
// TRUNCATE mytable

注釈

もし TRUNCATE コマンドが利用できないなら、truncate() は "DELETE FROM table" を実行します。

$builder->getCompiledDelete()

これは $builder->getCompiledInsert() とまったく同じ方法で動作しますが、異なる点は INSERT 文ではなく DELETE 文を返すところです。

詳しくは $builder->getCompiledInsert() のドキュメントをご覧ください。

メソッドチェーン

メソッドチェーンは、複数のメソッドをつなげる構文をシンプルにしてくれます。次の例を見てみましょう:

$query = $builder->select('title')
                 ->where('id', $id)
                 ->limit(10, 20)
                 ->get();

クエリビルダのリセット

$builder->resetQuery()

クエリビルダのリセットにより、$builder->get() や $builder->insert() のような利用をしなくても新たなクエリを始めることができます。

例えば クエリビルダに SQL を生成(例: $builder->getCompiledSelect())させ、その後またクエリを実行したい場合などで使えるでしょう:

// Note that the second parameter of the get_compiled_select method is FALSE
$sql = $builder->select(['field1','field2'])
               ->where('field3',5)
               ->getCompiledSelect(false);

// ...
// Do something crazy with the SQL code... like add it to a cron script for
// later execution or something...
// ...

$data = $builder->get()->getResultArray();

// Would execute and return an array of results of the following query:
// SELECT field1, field1 from mytable where field3 = 5;

クラスリファレンス

class CodeIgniterDatabaseBaseBuilder
resetQuery()
戻り値:BaseBuilder インスタンス(メソッドチェーン)
戻り値の型:BaseBuilder

現在のクエリビルダの状態をリセットします。Useful when you want to build a query that can be canceled under certain conditions.

countAllResults([$reset = TRUE])
パラメータ:
  • $reset (bool) -- 次の SELECT のためにリセットするかどうか
戻り値:

クエリ結果の行数

戻り値の型:

int

クエリビルダのクエリが返す結果の行数を数える、プラットフォーム依存のクエリ文字列を生成します。

countAll([$reset = TRUE])
パラメータ:
  • $reset (bool) -- 次の SELECT のためにリセットするかどうか
戻り値:

クエリ結果の行数

戻り値の型:

int

クエリビルダのクエリが返す結果の行数を数える、プラットフォーム依存のクエリ文字列を生成します。

get([$limit = NULL[, $offset = NULL]])
パラメータ:
  • $limit (int) -- LIMIT 句
  • $offset (int) -- OFFSET 句
戻り値:

CodeIgniterDatabaseResultInterface instance (method chaining)

戻り値の型:

CodeIgniterDatabaseResultInterface

すでに呼び出されているクエリビルダメソッドを元にして SELECT 文を組み立てて実行します。

getWhere([$where = NULL[, $limit = NULL[, $offset = NULL]]])
パラメータ:
  • $where (string) -- WHERE 句
  • $limit (int) -- LIMIT 句
  • $offset (int) -- OFFSET 句
戻り値:

CodeIgniterDatabaseResultInterface instance (method chaining)

戻り値の型:

CodeIgniterDatabaseResultInterface

get() と同じですが、WHERE を直接追加できます。

select([$select = '*'[, $escape = NULL]])
パラメータ:
  • $select (string) -- クエリの SELECT 句
  • $escape (bool) -- 識別子と値をエスケープするかどうか
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

クエリに SELECT 句を追加します。

selectAvg([$select = ''[, $alias = '']])
パラメータ:
  • $select (string) -- 平均値を計算するフィールド
  • $alias (string) -- 結果の値のエイリアス名
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

クエリに SELECT AVG(field) 句を追加します。

selectMax([$select = ''[, $alias = '']])
パラメータ:
  • $select (string) -- 最大値を計算するフィールド
  • $alias (string) -- 結果の値のエイリアス名
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

クエリに SELECT MAX(field) 句を追加します。

selectMin([$select = ''[, $alias = '']])
パラメータ:
  • $select (string) -- 最小値を計算するフィールド
  • $alias (string) -- 結果の値のエイリアス名
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

クエリに SELECT MIN(field) 句を追加します。

selectSum([$select = ''[, $alias = '']])
パラメータ:
  • $select (string) -- 合計値を計算するフィールド
  • $alias (string) -- 結果の値のエイリアス名
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

クエリに SELECT SUM(field) 句を追加します。

distinct([$val = TRUE])
パラメータ:
  • $val (bool) -- "distinct" フラグを必要とするか
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

クエリビルダに対し、クエリの SELECT 句に DISTINCT 句を追加させるかどうかを設定します。

from($from)
パラメータ:
  • $from (mixed) -- テーブル名; string または array
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

クエリに FROM 句を指定します。

join($table, $cond[, $type = ''[, $escape = NULL]])
パラメータ:
  • $table (string) -- join するテーブル名
  • $cond (string) -- JOIN ON 条件
  • $type (string) -- JOIN の方式
  • $escape (bool) -- 識別子と値をエスケープするかどうか
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

クエリに JOIN 句を追加します。

where($key[, $value = NULL[, $escape = NULL]])
パラメータ:
  • $key (mixed) -- 比較するフィールド名、または連想配列
  • $value (mixed) -- 単一のキーである場合、比較する値
  • $escape (bool) -- 識別子と値をエスケープするかどうか
戻り値:

BaseBuilder インスタンス

戻り値の型:

object

クエリの WHERE 句を生成します。 複数回呼び出しは 'AND' になります。

orWhere($key[, $value = NULL[, $escape = NULL]])
パラメータ:
  • $key (mixed) -- 比較するフィールド名、または連想配列
  • $value (mixed) -- 単一のキーである場合、比較する値
  • $escape (bool) -- 識別子と値をエスケープするかどうか
戻り値:

BaseBuilder インスタンス

戻り値の型:

object

クエリの WHERE 句を生成します。 複数回呼び出しは 'OR' になります。

orWhereIn([$key = NULL[, $values = NULL[, $escape = NULL]]])
パラメータ:
  • $key (string) -- 検索するフィールド
  • $values (array) -- 検索する値
  • $escape (bool) -- 識別子と値をエスケープするかどうか
戻り値:

BaseBuilder インスタンス

戻り値の型:

object

IN ('item', 'item') での WHERE 句を生成し、必要に応じて OR でつなげます。

orWhereNotIn([$key = NULL[, $values = NULL[, $escape = NULL]]])
パラメータ:
  • $key (string) -- 検索するフィールド
  • $values (array) -- 検索する値
  • $escape (bool) -- 識別子と値をエスケープするかどうか
戻り値:

BaseBuilder インスタンス

戻り値の型:

object

NOT IN ('item', 'item') での WHERE 句を生成し、必要に応じて OR でつなげます。

whereIn([$key = NULL[, $values = NULL[, $escape = NULL]]])
パラメータ:
  • $key (string) -- 調査するフィールド名
  • $values (array) -- 対象値の配列
  • $escape (bool) -- 識別子と値をエスケープするかどうか
戻り値:

BaseBuilder インスタンス

戻り値の型:

object

IN ('item', 'item') での WHERE 句を生成し、必要に応じて AND でつなげます。

whereNotIn([$key = NULL[, $values = NULL[, $escape = NULL]]])
パラメータ:
  • $key (string) -- 調査するフィールド名
  • $values (array) -- 対象値の配列
  • $escape (bool) -- 識別子と値をエスケープするかどうか
戻り値:

BaseBuilder インスタンス

戻り値の型:

object

NOT IN ('item', 'item') での WHERE 句を生成し、必要に応じて AND でつなげます。

groupStart()
戻り値:BaseBuilder インスタンス(メソッドチェーン)
戻り値の型:BaseBuilder

グループ開始の字句であり、その内部では AND を使用します。

orGroupStart()
戻り値:BaseBuilder インスタンス(メソッドチェーン)
戻り値の型:BaseBuilder

グループ開始の字句であり、その内部では OR を使用します。

notGroupStart()
戻り値:BaseBuilder インスタンス(メソッドチェーン)
戻り値の型:BaseBuilder

グループ開始の字句であり、その内部では AND NOT を使用します。

orNotGroupStart()
戻り値:BaseBuilder インスタンス(メソッドチェーン)
戻り値の型:BaseBuilder

グループ開始の字句であり、その内部では OR NOT を使用します。

groupEnd()
戻り値:BaseBuilder インスタンス
戻り値の型:object

グループ終了の字句です。

like($field[, $match = ''[, $side = 'both'[, $escape = NULL]]])
パラメータ:
  • $field (string) -- フィールド名
  • $match (string) -- 一致させるテキスト
  • $side (string) -- 語句のどちらの側に '%' ワイルドカードをつけるか
  • $escape (bool) -- 識別子と値をエスケープするかどうか
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

クエリに LIKE 句を追加します。複数回呼び出しは AND で区切ります。

orLike($field[, $match = ''[, $side = 'both'[, $escape = NULL]]])
パラメータ:
  • $field (string) -- フィールド名
  • $match (string) -- 一致させるテキスト
  • $side (string) -- 語句のどちらの側に '%' ワイルドカードをつけるか
  • $escape (bool) -- 識別子と値をエスケープするかどうか
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

クエリに LIKE 句を追加します。複数回呼び出しは OR で区切ります。

notLike($field[, $match = ''[, $side = 'both'[, $escape = NULL]]])
パラメータ:
  • $field (string) -- フィールド名
  • $match (string) -- 一致させるテキスト
  • $side (string) -- 語句のどちらの側に '%' ワイルドカードをつけるか
  • $escape (bool) -- 識別子と値をエスケープするかどうか
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

クエリに NOT LIKE 句を追加します。複数回呼び出しは AND で区切ります。

orNotLike($field[, $match = ''[, $side = 'both'[, $escape = NULL]]])
パラメータ:
  • $field (string) -- フィールド名
  • $match (string) -- 一致させるテキスト
  • $side (string) -- 語句のどちらの側に '%' ワイルドカードをつけるか
  • $escape (bool) -- 識別子と値をエスケープするかどうか
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

クエリに NOT LIKE 句を追加します。複数回呼び出しは OR で区切ります。

having($key[, $value = NULL[, $escape = NULL]])
パラメータ:
  • $key (mixed) -- 識別子(string)またはフィールド/値のペアの連想配列
  • $value (string) -- $key が識別子の場合に、調べる値
  • $escape (string) -- 値と識別子をエスケープするかどうか
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

クエリに HAVING 句を追加します。複数回呼び出しは AND で区切ります。

orHaving($key[, $value = NULL[, $escape = NULL]])
パラメータ:
  • $key (mixed) -- 識別子(string)またはフィールド/値のペアの連想配列
  • $value (string) -- $key が識別子の場合に、調べる値
  • $escape (string) -- 値と識別子をエスケープするかどうか
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

クエリに HAVING 句を追加します。複数回呼び出しは OR で区切ります。

groupBy($by[, $escape = NULL])
パラメータ:
  • $by (mixed) -- group by するフィールド; string または array
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

クエリに GROUP BY 句を追加します。

orderBy($orderby[, $direction = ''[, $escape = NULL]])
パラメータ:
  • $orderby (string) -- order by するフィールド
  • $direction (string) -- 要求する並び順 - ASC、DESC、random
  • $escape (bool) -- 識別子と値をエスケープするかどうか
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

クエリに ORDER BY 句を追加します。

limit($value[, $offset = 0])
パラメータ:
  • $value (int) -- 結果を limit する行数
  • $offset (int) -- スキップする行数
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

クエリに LIMIT 句と OFFSET 句を追加します。

offset($offset)
パラメータ:
  • $offset (int) -- スキップする行数
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

クエリに OFFSET 句を追加します。

set($key[, $value = ''[, $escape = NULL]])
パラメータ:
  • $key (mixed) -- フィールド名、またはフィールド/値をペアにした配列
  • $value (string) -- $key が単一のフィールドである場合に、フィールド値
  • $escape (bool) -- 識別子と値をエスケープするかどうか
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

あとの insert()update()replace() にフィールド/値のペアを追加します。

insert([$set = NULL[, $escape = NULL]])
パラメータ:
  • $set (array) -- フィールド/値のペアの連想配列
  • $escape (bool) -- 識別子と値をエスケープするかどうか
戻り値:

成功時は TRUE、失敗時は FALSE

戻り値の型:

bool

INSERT 文を組み立てて実行します。

insertBatch([$set = NULL[, $escape = NULL[, $batch_size = 100]]])
パラメータ:
  • $set (array) -- insert するデータ
  • $escape (bool) -- 識別子と値をエスケープするかどうか
  • $batch_size (int) -- 一度に insert する行数
戻り値:

insert した行数、または失敗時に FALSE

戻り値の型:

mixed

まとめての INSERT 文を組み立てて実行します。

注釈

$batch_size 行数より多くの値が渡された場合、複数回の INSERT クエリが実行され、それぞれで $batch_size 行の insert が行われます。

setInsertBatch($key[, $value = ''[, $escape = NULL]])
パラメータ:
  • $key (mixed) -- フィールド名、またはフィールド/値をペアにした配列
  • $value (string) -- $key が単一のフィールドである場合に、フィールド値
  • $escape (bool) -- 識別子と値をエスケープするかどうか
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

あとで insertBatch() により insert されるフィールド/値のペアを追加します。

update([$set = NULL[, $where = NULL[, $limit = NULL]]])
パラメータ:
  • $set (array) -- フィールド/値のペアの連想配列
  • $where (string) -- WHERE 句
  • $limit (int) -- LIMIT 句
戻り値:

成功時は TRUE、失敗時は FALSE

戻り値の型:

bool

UPDATE 文を組み立てて実行します。

updateBatch([$set = NULL[, $value = NULL[, $batch_size = 100]]])
パラメータ:
  • $set (array) -- フィールド名、またはフィールド/値をペアにした連想配列
  • $value (string) -- $key が単一のフィールドである場合に、フィールド値
  • $batch_size (int) -- ひとつのクエリにまとめる条件数
戻り値:

update した行数、または失敗時に FALSE

戻り値の型:

mixed

まとめての UPDATE 文を組み立てて実行します。

注釈

$batch_size より多くのフィールド/値のペアが渡された場合、複数回のクエリが実行され、それぞれで $batch_size のフィールド/値のペアが操作されます。

setUpdateBatch($key[, $value = ''[, $escape = NULL]])
パラメータ:
  • $key (mixed) -- フィールド名、またはフィールド/値をペアにした配列
  • $value (string) -- $key が単一のフィールドである場合に、フィールド値
  • $escape (bool) -- 識別子と値をエスケープするかどうか
戻り値:

BaseBuilder インスタンス(メソッドチェーン)

戻り値の型:

BaseBuilder

あとで updateBatch() により update されるフィールド/値のペアを追加します。

replace([$set = NULL])
パラメータ:
  • $set (array) -- フィールド/値のペアの連想配列
戻り値:

成功時は TRUE、失敗時は FALSE

戻り値の型:

bool

REPLACE 文を組み立てて実行します。

delete([$where = ''[, $limit = NULL[, $reset_data = TRUE]]])
パラメータ:
  • $where (string) -- WHERE 句
  • $limit (int) -- LIMIT 句
  • $reset_data (bool) -- TRUE にするとクエリの "書き込み" 句をリセットします
戻り値:

BaseBuilder インスタンス(メソッドチェーン)、または失敗時に FALSE

戻り値の型:

mixed

DELETE 文を組み立てて実行します。

increment($column[, $value = 1])
パラメータ:
  • $column (string) -- 加算するカラム名
  • $value (int) -- カラムに加算する数

指定の数をフィールドの値に加算します。もしフィールドが数値フィールドでない場合、例えば VARCHAR のような場合、おそらくは $value で置換されるでしょう。

decrement($column[, $value = 1])
パラメータ:
  • $column (string) -- 減算するカラム名
  • $value (int) -- カラムを減算する数

指定の数をフィールドの値で減産します。もしフィールドが数値フィールドでない場合、例えば VARCHAR のような場合、おそらくは $value で置換されるでしょう。

truncate()
戻り値:成功時は TRUE、失敗時は FALSE
戻り値の型:bool

テーブルに TRUNCATE 文を実行します。

注釈

データベースプラットフォームが TRUNCATE をサポートしていない場合、DELETE 文で代替します。

emptyTable()
戻り値:成功時は TRUE、失敗時は FALSE
戻り値の型:bool

DELETE 文を使用してテーブルのすべてのレコードを削除します。

getCompiledSelect([$reset = TRUE])
パラメータ:
  • $reset (bool) -- 現在のクエリビルダをリセットするかどうか
戻り値:

組み立てられた SQL 文を文字列で

戻り値の型:

string

SELECT 文を組み立て、文字列として返します。

getCompiledInsert([$reset = TRUE])
パラメータ:
  • $reset (bool) -- 現在のクエリビルダをリセットするかどうか
戻り値:

組み立てられた SQL 文を文字列で

戻り値の型:

string

INSERT 文を組み立て、文字列として返します。

getCompiledUpdate([$reset = TRUE])
パラメータ:
  • $reset (bool) -- 現在のクエリビルダをリセットするかどうか
戻り値:

組み立てられた SQL 文を文字列で

戻り値の型:

string

UPDATE 文を組み立て、文字列として返します。

getCompiledDelete([$reset = TRUE])
パラメータ:
  • $reset (bool) -- 現在のクエリビルダをリセットするかどうか
戻り値:

組み立てられた SQL 文を文字列で

戻り値の型:

string

DELETE 文を組み立て、文字列として返します。