2013-12-04 3 views
0

В контроллере, который полностью не связан - DoctorsController, мне нужно получить информацию из моей модели ChildrenMedicine, а также название лекарства, которое находится в его собственной родственной медицине модель. Так что в моем (несвязанном) контроллере DoctorsController я использую:cakephp - использование loadmodel и получение данных, связанных с загруженной моделью

$this->loadModel('ChildrenMedicine'); 
$this->ChildrenMedicine->recursive = 2; 
$childsMeds = $this->ChildrenMedicine->find('all', array('conditions'=>array('child_id'=>$child))); 

Я ожидал, чтобы меня массив со всеми лекарствами, которые в настоящее время использует ребенок, плюс информацию из таблицы лекарств, так что я могу получить имя. Однако это только дает мне:

$childsMeds[0]['ChildrenMedicine'] 
$childsMeds[1]['ChildrenMedicine'] 

тогда я надеялся на

$childsMeds[0]['ChildrenMedicine'] 
$childsMeds[0]['Medicine'] 
$childsMeds[0]['Child'] 
$childsMeds[1]['ChildrenMedicine'] 
$childsMeds[1]['Medicine'] 
$childsMeds[1]['Child'] 

Может кто-нибудь просветить меня?

EDIT - мое ChildrenMedicine модель ассоциация:

public $belongsTo = array(
    'Child' => array(
     'className' => 'Child', 
     'foreignKey' => 'child_id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ), 
    'Medicine' => array(
     'className' => 'Medicine', 
     'foreignKey' => 'medicine_id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ) 
); 
+0

Можете ли вы разместить свои ассоциации моделей KidsMedicine? – Sixthpoint

+0

@Sixthpoint Я разместил его выше, спасибо за поиск :) –

+0

простых проверок, у вас есть внешний ключ в таблице KidsMedicine, называемый «medic_id» и «child_id». Кроме того, убедитесь, что у вас есть данные, связывающие ассоциации. http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#belongsto – Sixthpoint

ответ

0

альтернатива метод будет использовать присоединяется, чтобы решить эту проблему. Было бы лучше вариант, опираясь на настройки рекурсивной = 2.

$data = $this->ChildrenMedicine->find('all', array('conditions' => array('child_id'=>$child), 'joins' => array( 
      array( 
       'table' => 'medicines', 
       'alias' => 'Medicine', 
       'type' => 'inner', // could also do outter 
       'foreignKey' => false, 
       'conditions'=> array('ChildrenMedicine.medicine_id= Medicine.medicine_id') 
      )))); 

Вы можете прочитать на joins here

Для создания HABTM отношений this article кажется полезным. Посмотрите на код «Модель»

+0

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

1

Используйте Containable Behavior.

$this->loadModel('ChildrenMedicine'); 
$this->ChildrenMedicine->Behaviors->load('Containable'); 
$childsMeds = $this->ChildrenMedicine->find('all', 
        array(
         'conditions' => array('child_id'=>$child), 
         'contain' => array('Child', 'Medicine') 
       )); 
Смежные вопросы