在CakePHP 3中,要更新另一个表中的相关行,可以使用模型关联和关联操作来实现。以下是一个示例:
// src/Model/Table/TableAModel.php
namespace App\Model\Table;
use Cake\ORM\Table;
class TableAModel extends Table
{
public function initialize(array $config)
{
$this->hasMany('TableB');
}
}
// src/Controller/YourController.php
namespace App\Controller;
use App\Model\Table\TableAModel;
use Cake\Datasource\ConnectionManager;
class YourController extends AppController
{
public function updateRelatedRows()
{
$tableA = new TableAModel();
$connection = ConnectionManager::get('default');
// 开始一个事务
$connection->begin();
try {
// 获取TableA的记录
$tableARecord = $tableA->get($tableAId, ['contain' => 'TableB']);
// 更新TableB的相关行
foreach ($tableARecord->table_b as $tableBRecord) {
$tableBRecord->field = $newValue;
$tableA->TableB->save($tableBRecord);
}
// 提交事务
$connection->commit();
$this->Flash->success('相关行更新成功!');
return $this->redirect(['action' => 'index']);
} catch (\Exception $e) {
// 回滚事务
$connection->rollback();
$this->Flash->error('相关行更新失败!');
return $this->redirect(['action' => 'index']);
}
}
}
在上面的示例中,我们首先获取了TableA的记录,并通过关联关系获取了相关的TableB记录。然后,我们遍历TableB的记录,并更新相应的字段值。最后,我们使用save()方法保存更新后的TableB记录。
请注意,上述示例中的代码仅供参考,你需要根据你的实际情况进行适当的修改和调整。
希望以上信息对你有帮助!如果你需要更多帮助或有其他问题,请随时提问。
领取专属 10元无门槛券
手把手带您无忧上云