<div class="section">
CakePHPでデータベースのテーブルにデータを保存するには、save()を使います。
$data = array('User', array('name' => 'hoge', 'birth' => '1988-01-01', 'b_type' => 'A')); $this->User->save($data);
この命令により以下のSQLが実行されます。
INSERT INTO users ('name', 'birth', 'b-type') value ('hoge', '1988-01-01', 'A'); SELECT * FROM users;
id | name | birth | b_type |
1 | hoge | 1988-01-01 | A |
作られたデータをUPDATEしたい場合には、主キーの「id」を指定してsaveすればUPDATEできます。
$data = array('User', array('id' => 1, 'name' => 'foo')); $this->User->save($data); UPDATE users SET name = 'foo', birth = '1988-01-01', b_type = 'A' WHERE id = 1; SELECT * FROM users;
id | name | birth | b_type |
1 | foo | 1988-01-01 | A |
しかし、この方法ではUPDATEする必要のないデータまで同じ値でUPDATEしてしまいます。
これを回避するために、save()にはいくつかの引数を与えることができます。
構文1 save(array $data = null, boolean $validate = true, array $fieldList = array()) 構文2 save(array $data = null, array $params = array()) array( 'validate' => true, 'fieldList' => array(), 'callbacks' => true //other possible values are false, 'before', 'after' )
引数を指定してnameだけをUPDATEしてみましょう。
$data = array('User', array('id' => 1, 'name' => 'bar')); $fields = array('name'); $this->User->save($data, false, $fields); UPDATE users SET name = 'bar' WHERE id = 1; SELECT * FROM users;
id | name | birth | b_type |
1 | bar | 1988-01-01 | A |
余計なSQLは避けたほうがいいので、しっかり引数を与えて制御したほうがいいようです。
参考
http://book.cakephp.org/ja/view/75/Saving-Your-Data