2015-03-31 5 views
-1

Привет, У меня возникла какая-то проблема. Я пытаюсь создать файл patientcontroller.php, в котором я хочу получить данные только для одного идентификатора пользователя из таблицы пользователей, чтобы я мог создать панель мониторинга для sngle пациента вот мой код:cakephp3.0 query Builder Получить данные

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, серьезно, используйте плагин bake, чтобы испечь свой код, который будет выводить код лучшей практики VALID, который вы можете узнать из будущего. То, что вы сейчас делаете, скорее всего, гадает. Это вам не помогает, и даже если мы это сделаем, это будет продолжаться всего несколько часов. Если вы хотите закончить свой проект в разумные сроки, я настоятельно рекомендую сделать то, что рассказывают опытные (основные) разработчики. Пожалуйста :) Мы были там, и мы знаем, о чем говорим. – mark

ответ

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 если вы просто пытаются перейти от процедурного php к oops в cakephp.

+1

Хорошая работа, это правильный ответ! –

+0

, тогда дайте ему правильный ответ bro. Я не могу исправить свой собственный anser. –

+0

. Честно говоря, это был правильный ответ, и я счастлив, что вы можете понять это –

2

Учитывая, что это в основном ваш третий вопрос, задающий вопрос за одно и то же (получение результатов запроса) Я укажу вам на эти очень полезные ресурсы, которые вы должны читать:

учебных пособия: http://book.cakephp.org/3.0/en/tutorials-and-examples.html

Они в основном все, что нужно, чтобы понять, как работают запросы и как их можно использовать в представлении и формах.

ORM так руководство: http://book.cakephp.org/3.0/en/orm.html

вы найдете множество примеров получения данных и использовать его после извлечения его.

+0

ya Я знаю, что есть много примеров, но в этом коде echo $ this-> Auth-> user ('id'); \t $ users = TableRegistry :: get ('Users'); $ users-> find(); \t \t $ this-> set ('users', $ users); –

+0

Я не могу получить какие-либо данные на основе запроса builder Я использую $ users = TableRegistry :: get ('Users'); $ Users-> найти(); –

+0

вы можете обновить этот ответ с помощью решения –

3

Итак, у вас есть ряд проблем как с вашим подходом, так и с вашим кодом.

Методы
http://book.cakephp.org/3.0/en/controllers.html
Если вы хотите, чтобы получить один пациентов записи, вы должны использовать метод view() в контроллере. Поэтому вам нужно создать новый метод под названием view(), в котором вы можете вернуть свою запись. Этот метод должен в большинстве случаев принимать идентификатор в качестве параметра.

Столы
http://book.cakephp.org/3.0/en/orm/table-objects.html
В CakePHP будет загружена таблица, которая связана с контроллером по умолчанию. Поэтому нет необходимости использовать TableRegistry для загрузки таблицы.

Fetching данные
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

Я использую таблицу пользователей, основанную на ролях один для пациента и один для врачей, поэтому после входа в систему я перенаправляю страницу пациента на страницу пациента и их я хочу получить данные идентификатора пользователя, через который я буду ассоциировать другие таблицы, поэтому я использую реестр таблиц для модели пользователей, а затем я хочу найти имя пользователя и другие данные в индексном представлении, чтобы создать профиль пользователей –

+0

Итак, вы должны быть используя метод 'UserController :: view()'. Доступ к одному элементу осуществляется с помощью метода 'view()' в большинстве случаев, поскольку индекс представляет собой список элементов. –

+0

Я хочу сделать это простым, поэтому нужно избегать зависимости. Мой подход очень прост с использованием tableregistry. Я получаю модель пользователей. Мне нужно просто добавить простой запрос, выберите имя пользователя и все где id = id, через который пользователь вводит логин, и я хочу поместите эти данные в индексный метод, мой код очень прост и почти прав, но я прошу в своем подходе и кодексе, что я делаю неправильно .http: //stackoverflow.com/questions/29362318/cakephp-3-0-query-toarray/29363014 # 29363014 Здесь я сделал это, но то же самое не происходит –