【问题标题】:cakephp3.0 query Builder Retrieve datacakephp3.0 查询生成器检索数据
【发布时间】:2015-03-31 10:03:49
【问题描述】:

嘿,我遇到了一些问题,我正在尝试创建一个 patientcontroller.php,我想在其中仅从 users 表中获取一个用户 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 中获取用户名简历和个人资料信息我正在尝试使用查询生成器传递数据,但我很困惑所以任何帮助

【问题讨论】:

  • 一个非常重要的提示:学习基础知识。真的。了解他们。从长远来看,它将对您有所帮助。在您的情况下,这意味着:认真地使用 BAKE,使用 bake 插件来烘烤您的代码,这将输出您将来可以从中学习的 VALID 最佳实践代码。你目前正在做的可能是猜测。那对您没有帮助,即使我们这样做了,它也只会持续几个小时。如果你想在合理的时间范围内完成你的项目,我强烈建议你按照经验丰富的(核心)开发人员告诉你的去做。请 :) 我们去过那里,我们知道我们在谈论什么。

标签: query-builder cakephp-3.0


【解决方案1】:

因此,您的方法、技术和代码都存在许多问题。

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

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

获取数据
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

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

【讨论】:

  • 我正在使用基于角色的用户表,一个用于患者,一个用于医生,因此登录后我将患者重定向到患者索引页面,我想获取用户 ID 的数据,我将通过该数据关联其他表,所以我将表注册表用于用户模型,然后我想在索引视图中查找用户名和其他详细信息,以便我可以创建用户配置文件
  • 所以你应该使用UsersController::view() 方法。在大多数情况下,通过view() 方法访问单个项目,因为索引是项目列表。
  • 我想让它变得简单,所以必须避免依赖我的方法非常简单,使用 tableregistry 我正在获取用户模型现在我只需要添加简单的查询选择用户名和 all where id = an id through which用户正在登录,我想将该数据放入索引方法中,我的代码非常简单,几乎是正确的,但我在我的方法和代码中询问我做错了什么。stackoverflow.com/questions/29362318/cakephp-3-0-query-toarray/…在这里我已经做到了,但同样的事情没有发生
  • 简洁是令人钦佩的,但事实上,你正在打破常规,让你的应用程序变得更加复杂。您似乎对 CakePHP 的工作原理及其约定缺乏基本的了解。这就是你挣扎的原因。
  • 是的,我知道 cakephp 我正在尝试在 cakephp 中创建一个简单的程序类型的代码。所以代码结构一定要简洁。这只是一个问题,因为它有非常简单的教程,并且不需要像创建通用搜索功能这样的示例完整示例需要文档应该非常简单和完整的示例,例如搜索和其他
【解决方案2】:

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

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

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

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

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

【讨论】:

  • 是的,我知道有很多例子,但在这段代码中 echo $this->Auth->user('id'); $users = TableRegistry::get('Users'); $用户->查找(); $this->set('users', $users);
  • 我无法根据我正在使用的查询生成器获取任何数据 $users = TableRegistry::get('Users'); $users->find();
  • 请这是一个非常简单的问题,您将获得声誉
【解决方案3】:

我找到了这个查询的解决方案:此类问题的完整代码: PatientController.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'));
       }
    }

对于索引.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 迁移到 cakephp 中的 oops,这种解决方案非常有用。

【讨论】:

  • 然后给它一个正确的答案兄弟我无法纠正我自己的分析器
  • 老实说,这是正确的答案,我很高兴你能弄清楚
猜你喜欢
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
相关资源
最近更新 更多