PHP
CakePHP
MySQL

CakePHPでのDB更新処理の2つの場合(idで指定 or whereで指定)の方法について

バージョンはCakePHP3.2です。

DBはMySQLを使ってます。

下記の条件についてそれぞれの方法を書いていきます


  1. idで更新するrowを指定する場合

  2. whereで更新するrowを指定する場合


1. idでupdateするrowを指定する場合


<?php
use Cake\ORM\TableRegistry;
// ~ 略 ~
// MembersTableの読み込み
$this->loadModel('Members');
// DBとの通信開始
$this->Members->connection()->begin();
// updateするrowをidで指定
$qurey = $this->Members->get('10');
// updateするcolumnの値を代入
$qurey->address = 'Kanagawa';
$qurey->age = '21';
// dataがあれば更新,無ければ挿入を行いつつ、処理結果をresultに代入。
$result = $this->Members->save($query);

if ( $result === false ) {
// もし失敗したらロールバック
$this->Members->connection()->rollback();
} else {
// 失敗していなければコミット
$this->Members->connection()->commit();
}


2. whereでupdateするrowを指定する場合


<?php
use Cake\Datasource\ConnectionManager;
use Cake\ORM\TableRegistry;
// ~ 略 ~
// MembersTableの読み込み
$this->loadModel('Members');
$connection = ConnectionManager::get('default');
// updateするcolumnの値を代入
$membernew = array(
'address' => 'Kanagawa',
'age' => '21'
);
// DBとの通信開始
$this->Members->connection()->begin();
// 更新するrowをwhereで探して取得する。
$query = $this->Members->find()
->where(['name' => 'Gaku'])
->where(['address' => 'Tokyo'])
->where(['age' => '20'])
->first();

if(isset($query)) {
// queryにデータがあれば更新処理にする。
$member = $this->Members->patchEntity($query, $membernew);
} else {
// データが無ければ挿入処理にする。
$member = $this->Members->newEntity($membernew);
}
// 上で指定した処理を実行しつつ結果を代入する
$result = $this->Members->save($member);

if ( $resource_result === false ) {
// もし失敗したらロールバック
$this->Members->connection()->rollback();
} else {
// 失敗していなければコミット
$this->Members->connection()->commit();
}

以上です。