[CodeIgniter3]クエリビルダまとめ

■SELECT系

組み立て
	$this->db->select('field1,field2,field3,field4,field5')
				->from('table1')
				->where('field1', 'xxx')
				->where('field2', 'yyy')
				->order_by('field1', 'DESC')
				->limit(10)
				->offset(20)

		SELECT field1,field2,field3,field4,field5
		FROM table1
		WHERE field1 = 'xxx' AND field2 = 'yyy'
		ORDER BY field1 DESC
		LIMIT 10
		OFFSET 20;

※各メソッドを『->』で結合することで連続処理できる(メソッドチェーン)
もちろん分解もできるのでIF文等の介入が容易。

	$this->db->select('*')
				->from('table1')
				->where('field1', '123');
	if ($cond) {
		$this->db->where('field2', '345');
	}

※where()を複数使用するとANDで接合される。
ORで接合する場合はor_where()メソッドが用意されている。

[ANDとORが混在する場合]

	->where('field1', 'xxx')
	->where('field2', 'yyy')
	->or_where('field3', 'zzz')
		WHERE field1 = 'xxx' AND field2 = 'yyy' OR field3 = 'zzz'

グループ化することで使い分け

	->group_start()
		->where('field1', 'xxx')
		->where('field2', 'yyy')
	->group_end()
		->or_where('field3', 'zzz')
		WHERE (field1 = 'xxx' AND field2 = 'yyy') OR field3 = 'zzz'

※IN句

	->where_in('field3', $array)
	->or_where_in('field3', $array)

※LIKE句

	->like('field4', 'abc')					field4 LIKE '%abc%' ESCAPE '!'
	->like('field4', 'abc', 'before')		field4 LIKE '%abc' ESCAPE '!'
	->like('field4', 'abc', 'after')		field4 LIKE 'abc%' ESCAPE '!'

※JOIN句

	->from('table1 AS t1')
	->join('table2 AS t2', 't1.id = t2.id', 'left')
		FROM table1 AS t1 LEFT JOIN table2 ON t1.id = t2.id

※利用できない特殊な場合は直接SQL文が書ける。

	->query('SQL文を直接記述');
結果を取得

単一行
row()
オブジェクトとして返す。row_object()も同じ。
※特定の行を取得するには引数に行番号を指定。

row_array()
配列として返す。

複数行
result()
オブジェクトとして返す。row_object()も同じ。
result_array()
配列として返す。

	$data = $this->db->select('field1, field2')
							->from('table1')
							->get()
							->result_array();
クエリを発行+結果セットを返す(get)
		$query = $this->db->select('field1, field2')
								->from('table1')
								->get();

get_where(テーブル名, where条件(配列))で簡単取得

		$query = $this->db->select('field1, field2')
							->get_where('table1', ['id' => 1]);

■INSERT

insert(テーブル名, データ配列)

	$data = ['field1' => 'value1', 'field2' => 'value2', 'field3' => 'value3'];
	$this->db->insert('table1', $data);
		INSERT INTO table1 (field1, field2, field3) VALUES ('value1', 'value2', 'value3');

■UPDATE

update(テーブル名, データ配列, where条件(配列));

	$data = ['field1' => 'value1', 'field2' => 'value2', 'field3' => 'value3'];
	$this->db->update('table1', $data, ['id' => 2]);

■DELETE

delete(テーブル名, where条件(配列))

	$this->db->delete('table1', ['id' => 2]);

■TRUNCATE

truncate(テーブル名)

	$this->truncate('table1');

■その他

直前に挿入したデータのidをを返す

	$this->db->insert_id()

直前のクエリで影響された行数を返す

	$this->db->affected_rows()

直前に実行したクエリを返す

	$this->db->last_query()

トランザクション

	// Start
	$this->db->trans_begin();

	・・・

	if ($this->db->trans_status() === FALSE) {
		// Rollback
		$this->db->trans_rollback();
		return false;
	} else {
		// Commit
		$this->db->trans_commit();
		return true;
	}