初心者がCakephpをやる件、ガシガシと進めています。
難しい処理は後回しにしてDBの出入力を中心に目標の7割方できてきました。
DBに関わる処理はselect、insert、deleteなど限られるわけですが、あちこちからコピペしたためか、全体的に記述が統一されていません。
ここで復習を兼ねて全ソースを見直し、整理して自分なりの構文をまとめてみました。
●値の取得(複数)
条件に合致した値を取得してviewに渡す処理。
$cond = array('post.user_id' => $this->Auth->user('id'));
$data = $this->Post->findAll($cond, null, 'Post.created desc');
$this->set("data", $data);
・findAll(条件式,取得フィールド(nullで全て),取得順序)
・例はAuthComponentでログインしたユーザーと同じidのPostデータを取得。
なお上2行はこっちでも同じ処理。わかりやすいかもしれない。
$data = $this->Post->findAllById($this->Auth->user('id'), null, 'Post.created desc');
findAllByIdAndPasswordというand条件にしても直感的でわかりやすい。
●値の取得(1件のみ)
条件に合致した値を1件のみ取得する。パラメタを指定してのedit、deleteのときによく使う。
function edit($id){
$this->Post->id = $id;
$data = $this->Post->read();
なお上2行はこっちでも同じ処理。わかりやすいかもしれない。
$data = $this->Post->findByid($id);
●DBへのデータ保存
insertのとき
$data = array(
'Post' => array(
'title' => $this->data['Post']['title'],
'body' => $this->data['Post']['body'],
'post_date' => $this->data['Post']['post_date'],
)
);
$this->Post->save($data)
updateのとき
$data = array(
'Post' => array(
'title' => $this->data['Post']['title'],
'body' => $this->data['Post']['body'],
'post_date' => $this->data['Post']['post_date'],
)
);
$this->data['Post']['id'] = $id;
$this->Post->save($data)
updateのときはidを指定する。
また更新する値だけを$dataに記述しないと、任意の値を書き換えられることになるのでセキュリティ的に問題あり。
色々と試行錯誤してきたけど、難しいことしなければこれだけで済むのか・・・。
ソースコードの見直し(リファクタリング)も楽だったし。
cakephpすげー。
コメント