cakephp3.0 query Builder 检索数据

cakephp3.0 query Builder Retrieve data

嘿,我遇到了一些问题,我正在尝试创建一个 patientcontroller.php,在其中我只想从用户 table 获取一个用户 ID 的数据,以便我可以为 sngle 创建一个仪表板病人这是我的代码:

PatientsController.php

 <?php 


 namespace App\Controller;

 use App\Controller\AppController;
 use Cake\Event\Event;
 use Cake\Network\Exception\NotFoundException;
 use Cake\ORM\TableRegistry;
 class PatientsController extends AppController
 { 


     public function isAuthorized($user)
 {
  return true;

   }

  public function index (){

 echo $this->Auth->user('id');
 $users = TableRegistry::get('Users');
 $users->find('all')->where(['id' => 4]);
 $this->set('users', $users);
 }

我想在我的 Index.ctp 中获取用户名简介和个人资料信息 我正在尝试使用查询生成器传递数据,但我很困惑所以任何帮助

鉴于这基本上是您在这里提出的第三个问题,要求完全相同的东西(获取查询结果),我将向您指出这些您应该阅读的非常有用的资源:

教程:http://book.cakephp.org/3.0/en/tutorials-and-examples.html

它们基本上包含您了解查询如何工作以及如何在视图和表单中使用它们所需的一切。

ORM 手册:http://book.cakephp.org/3.0/en/orm.html

您会发现很多获取数据并在检索数据后使用它的示例。

所以你的方法、技术和代码都有很多问题。

方法
http://book.cakephp.org/3.0/en/controllers.html
如果你想获得单个患者记录,你应该在你的控制器中使用 view() 方法。因此,您需要创建一个名为 view() 的新方法,您可以在其中 return 您的记录。这个方法在大多数情况下应该以一个id作为参数。

表格
http://book.cakephp.org/3.0/en/orm/table-objects.html
在 CakePHP 中,与控制器关联的 table 将默认加载。所以不需要使用 TableRegistry 来加载 table.

正在获取数据
http://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html
当您查找单个记录时,您有两种选择。您可以只使用 first().

的查找
$this->Patients->find()
   ->where(['id' => $id])
   ->first();

或者您可以使用 get(),如果找不到记录,它将抛出异常。

$this->Patients->get($id);

连接关联数据
http://book.cakephp.org/3.0/en/orm/associations.html
如果您想将数据连接到您的用户,那么您将需要表来管理该数据,然后可以使用数据库中的外键包含这些数据。这将改变您的发现,包括 contain() 调用。

$this->Patients->find()
   ->where(['id' => $id])
   ->contain(['Profiles])
   ->first();

正在视图中输出数据
您可以像您所做的那样将查找的结果设置到视图中,然后您可以循环遍历,或者使用您设置的变量按您喜欢的方式输出它。在你的情况下 $user.

总结
所以总的来说,你可以看到你遗漏了很多东西。希望这能帮助您走上正轨。

我找到了此查询的解决方案:此类问题的完整代码: PatientsController.php

<?php 
   namespace App\Controller;
   use App\Controller\AppController;
   use Cake\Event\Event;
   use Cake\Network\Exception\NotFoundException;
   use Cake\ORM\TableRegistry;

   class PatientsController extends AppController { 
       public function isAuthorized($user) {
           return true;
       }

       public function index () {
          $id = $this->Auth->user('id');
          $articles = TableRegistry::get('Users');
          $query = $articles->find()
              ->where(['id' => $id]);

          $this->set(compact('query'));
       }
    }

对于Index.ctp

 <!-- File: src/Template/Articles/index.ctp  (edit links added) -->

  <h1>Patient Dashboard</h1>
  I am patient

  <?php  
  foreach ($query as $row) {
     echo $row->username ,$row->password;
  }
  ?>

如果您只是想从过程 php 转变为 oops in cakephp ,这种解决方案非常有用。