TksLab

IT系ブログ

【PHP】CakePHP3で一括更新する方法

スポンサーリンク

CakePHP3で複数データを一括更新したかったので、調べました。

※バージョンはCakePHP3.6でした。

 

以下のように「patchEntities」と「saveMany」を使って実現できました。

※「patchEntity」ではなく「patchEntities」です。

 

// モデル読込み
$testTables = TableRegistry::get('TestTables');

// データ取得
$testTableArray = $testTables->find()->where(['code' => 'abc'])->toArray();

// 更新データ作成
$updateDataArray = [];
foreach ($testTableArray as $data) {
    $updateData = [];
    // 主キー
    $updateData['id'] = $data['id'];
    // 更新値
    $updateData['status'] = 1;
    array_push($updateDataArray, $updateData);
}

// エンティティ作成
$entities = $testTables->patchEntities($testTableArray, $updateDataArray);

// 一括更新
$result = $testTables->saveMany($entities);

 

更新データ作成のforeach内で、条件を付けてarray_pushすれば、

条件に該当するデータだけ更新することもできます。