CakePHP 更新记录


为了查询数据库表的记录,我们首先需要使用TableRegistry类的get()方法来获取实例,get()方法接受表名作为参数。

使用这个新实例的get()方法,并传递主键来查找记录,该记录将保存在另一个实例中。

使用此实例设置要更新的新值,然后用TableRegistry类的实例调用save()方法来更新记录。

例子


修改config/routes.php文件,如下所示:

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
    $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
        'httpOnly' => true,
    ]));
    $builder->applyMiddleware('csrf');
    // $builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
    $builder->connect('/users/edit', ['controller' => 'Users', 'action' => 'edit']);
    $builder->fallbacks();
});

新建src/Controller/UsersController.php文件,并将以下代码复制到该文件中:

<?php
    namespace App\Controller;
    use App\Controller\AppController;
    use Cake\ORM\TableRegistry;
    use Cake\Datasource\ConnectionManager;
    class UsersController extends AppController{
        public function index(){
            $users = TableRegistry::get('users');
            $query = $users->find();
            $this->set('results',$query);
        }
        public function edit($id){
            if($this->request->is('post')){
                $username = $this->request->getData('username');
                $password = $this->request->getData('password');
                $users_table = TableRegistry::get('users');
                $users = $users_table->get($id);
                $users->username = $username;
                $users->password = $password;
                if($users_table->save($users))
                echo "User is udpated";
                $this->setAction('index');
            } else {
                $users_table = TableRegistry::get('users')->find();
                $users = $users_table->where(['id'=>$id])->first();
                $this->set('username',$users->username);
                $this->set('password',$users->password);
                $this->set('id',$id);
            }
        }
    }
?>

新建src/Template/Users/index.php文件,并将以下代码复制到该文件中:

<a href="add">Add User</a>
<table>
    <tr>
    <td>ID</td>
    <td>Username</td>
    <td>Password</td>
    <td>Edit</td>
    <td>Delete</td>
    </tr>
    <?php
        foreach ($results as $row):
        echo "<tr><td>".$row->id."</td>";
        echo "<td>".$row->username."</td>";
        echo "<td>".$row->password."</td>";
        echo "<td><a href='".$this->Url->build(["controller" => "Users","action" => "edit",$row->id])."'>Edit</a></td>";
        echo "<td><a href='".$this->Url->build(["controller" => "Users","action" => "delete",$row->id])."'>Delete</a></td></tr>";
        endforeach;
    ?>
</table>

新建src/Template/Users/edit.php文件,并将以下代码复制到该文件中:

<?php
    echo $this->Form->create(NULL,array('url'=>'/users/edit/'.$id));
    echo $this->Form->control('username',['value'=>$username]);
    echo $this->Form->control('password',['value'=>$password]);
    echo $this->Form->button('Submit');
    echo $this->Form->end();
?>

访问http://localhost/cakephp4/users执行上述示例,输出如下所示:

After Visiting

单击‘edit’按钮,输出如下所示:

Edit Button

现在,我们将名称 Virat 更新为 Virat123 并提交,输出如下所示:

Virat