2015-03-31 78 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