データの操作

CakePHPでデータ更新する主な方法は、
データベースのテーブルと紐付いた「モデル」のオブジェクトを介して行う。

コントローラー内でモデルのオブジェクトにアクセスするには、
以下のように行う。

「MainData」モデルを使う場合

$this->loadModel('MainData');
$this->MainData->find('all'$conditions);

「$this」オブジェクトから、メソッドチェインで呼び出す。

まずは「loadModel」メソッドから、呼び出すモデルを指定。
これでその行以降、モデルを使えるようになる。

次に、「$this」からメソッドチェインでモデル名を指定し、
さらに「find()」メソッドにアクセスする。
その中の第1引数には、データの形を指定(以下項目参照)。
第2引数には、連想配列で条件などを指定する(以下項目参照)。

モデルの中で行う場合には、$this->find()と、モデル名を省略する。
以下、このモデル名を省略した形(モデル内で実行)で記載する。

ORマッパー

SQL文を書かずに、フレームワークなどのメソッドでSQLを実行する要素を、
ORマッパーと呼ぶ。

基本的には、このORマッパーを使ってデータ操作を行うとよい。

データの挿入

データを挿入する際には、「save」メソッドを使用する。

$this->save(
  [
    'id' => 12,
    'name' => '田中',
    'age' => 26
  ]
);

主キーを指定していれば、その行に対する更新となり、
主キーを指定しなければ、新規追加となる。

データの抽出

$this->find('all',
    [
      'conditions' => [
	    'id' => 12
      ]
    ]
  ]
);

「find()」の第1引数には、取得するデータの形を文字列で指定する。

「all」は、条件に合うデータをすべて。
「first」は、最初に条件に合ったデータを1件のみ。
「list」は、主キー(id)を配列添え字にリスト状の二次配列で、
条件に合う全てのデータが返される。

「conditions」には、WHERE句のように条件指定を行う。
この場合、「id」カラムが「12」の行を取得する事になる。

クエリーを直に打つ

ORマッパーを使わずに、SQL文を直に実行する方法も存在する。

$this->query($sql);

引数の中には、文字列でSQL文を挿入すればよい。
ただしこの方法は、どうしてもモデルを作る事のできないテーブルぐらいにしか、
使用する機会も少ないだろう。

SQL文の方が、しっくり来るという人にはいいが、
そうでない人も改修に関わる事を考えれば、
プログラムとして統一性の取れる方法として、
ORマッパーを使う事も考えたほうがいいだろう。

また、SQLインジェクションへの対策も考慮する必要もある。