2015-03-31 51 views
-1

嘿,我正面临一些问题我想创建一个patientcontroller.php我只想从用户表中获取一个用户ID的数据,这样我就可以为sngle患者创建一个仪表板这里是我的代码:cakephp3.0查询生成器检索数据

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我试图使用查询生成器来传递数据,但我很困惑,所以任何帮助

+1

一个非常非常重要的提示:学习基础。真。了解他们。从长远来看,它会帮助你。在你的情况下,这意味着:认真使用BAKE,使用烘焙插件来烘焙你的代码,这将输出你可以从未来学到的有效的最佳实践代码。你目前正在做的事情可能是猜测。这对你没有帮助,即使我们这样做了,也只会持续几个小时。如果你想在合理的时间内完成你的项目,我强烈建议你去做有经验的(核心)开发者告诉你的。请:)我们一直在那里,我们知道我们在谈论什么。 – mark 2015-03-31 10:20:39

回答

2

我发现这个查询解决方案:对于这类问题的完整代码: 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; 
    } 
    ?> 

这种解决方案是,如果你veryhelpful只是试图从cakephp中的程序性php转移到oops。

+1

好的工作,这是正确的答案! – 2015-03-31 12:00:41

+0

然后给它一个正确的答案兄弟我不能纠正我自己的发烧友 – 2015-03-31 12:18:57

+0

我老实说,这是正确的答案,我很高兴你可以弄明白 – 2015-03-31 13:59:12

2

鉴于这基本上是您在这里询问的第三个问题对于同样的事情(获得查询结果),我会为你这些,你应该阅读非常有用的资源:

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

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

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

你会发现获取数据和检索之后使用它的很多例子。

+0

雅我知道有很多的例子,但在这个代码echo $ this-> Auth-> user('id'); \t $ users = TableRegistry :: get('Users'); $ users-> find(); \t \t $ this-> set('users',$ users); – 2015-03-31 10:18:32

+0

我无法获取任何基于查询生成器的数据我正在使用$ users = TableRegistry :: get('Users'); $用户 - >找到(); – 2015-03-31 10:19:31

+0

可以请你用解决方案更新这个答案 – 2015-03-31 10:20:01

3

因此,您的方法,技巧和代码都有许多问题。

方法
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

摘要
因此,总体而言,您可以看到有相当多的你缺少。希望这会帮助你走上正轨。

+0

我正在使用一个基于角色的病人和医生的用户表,所以登录后我将患者重定向到患者索引页面,他们我想要获得用户id的数据,通过它我将关联其他表,所以我使用表注册表为用户模型,然后我想在索引视图中查找用户名和其他详细信息,以便我可以创建用户配置文件 – 2015-03-31 10:27:14

+0

因此,您应该使用'UsersController :: view()'方法。在大多数情况下,通过'view()'方法访问单个项目,因为索引是项目列表。 – 2015-03-31 10:30:05

+0

我想使它简单,所以必须避免依赖我的方法是非常简单的使用tableregistry我现在正在获取用户模型我只需要添加简单的查询选择用户名和所有其中id =通过其登录用户的id,我想把这些数据放到索引方法中我的代码非常简单,几乎正确,但我在问我的方法和代码中我做错了什么.http://stackoverflow.com/questions/29362318/cakephp-3-0-query-toarray/29363014#29363014在这里,我已经做到了,但同样的事情没有发生 – 2015-03-31 10:40:00