2012-08-17 99 views
0

我有一个简单的cakephp 2.x应用程序,使用烘焙脚本烘焙。两张主表是条件和药物。一种情况HABTM药物和副verca。我试图在条件指数中列出属于条件的药物,基本列出所有条件,但仅限于那些药物。我曾尝试做这样,显示属于在一个逗号分隔的列表中的条件,这在其他1.3应用程序的工作原理药品:在视图中显示HABTM数据

<?php 
    $condition_drugs = ''; 
    foreach($condition['Drug'] as $drug): 
     $condition_drugs .= $drug['drug'] . ', '; 
     //echo $drug['generic']; 
    endforeach; 
    //echo substr($condition_drugs, 0, -2); 
    echo $condition_drugs; 
?> 

但它提供了以下两个错误: 未定义指数:药物[ APP /查看/条件/ index.ctp,第22行]和为foreach()提供的无效参数[APP/View/Conditions/index.ctp,line 22]

我还看了另一篇文章,它以类似的方式。我的代码有问题吗?我是否需要根据ID在我的模型中查找?下面是完整的索引视图代码和控制器:

查看:

<div class="conditions index"> 
    <h2><?php echo __('Conditions'); ?></h2> 
    <table cellpadding="0" cellspacing="0"> 
    <tr> 
      <th><?php echo $this->Paginator->sort('condition'); ?></th> 
      <th><?php echo $this->Paginator->sort('principles'); ?></th> 
      <th><?php echo $this->Paginator->sort('treatment'); ?></th> 
      <th><?php echo $this->Paginator->sort('clinical_tips'); ?></th> 
      <th>Drugs</th> 
      <th class="actions"><?php echo __('Actions'); ?></th> 
    </tr> 
    <?php 
    foreach ($conditions as $condition): ?> 
    <tr> 
     <td><?php echo h($condition['Condition']['condition']); ?>&nbsp;</td> 
     <td><?php echo h($condition['Condition']['principles']); ?>&nbsp;</td> 
     <td><?php echo h($condition['Condition']['treatment']); ?>&nbsp;</td> 
     <td><?php echo h($condition['Condition']['clinical_tips']); ?>&nbsp;</td> 
    <td> 
     <?php 
      $condition_drugs = ''; 
      foreach($condition['Drug'] as $drug): 
       $condition_drugs .= $drug['drug'] . ', '; 
       //echo $drug['generic']; 
      endforeach; 
      //echo substr($condition_drugs, 0, -2); 
      echo $condition_drugs; 
     ?> 
    </td> 
     <td class="actions"> 
      <?php echo $this->Html->link(__('View'), array('action' => 'view', $condition['Condition']['id'])); ?> 
      <?php echo $this->Html->link(__('Edit'), array('action' => 'edit', $condition['Condition']['id'])); ?> 
      <?php echo $this->Form->postLink(__('Delete'), array('action' => 'delete', $condition['Condition']['id']), null, __('Are you sure you want to delete # %s?', $condition['Condition']['id'])); ?> 
     </td> 
    </tr> 
<?php endforeach; ?> 
    </table> 
    <p> 
    <?php 
    echo $this->Paginator->counter(array(
    'format' => __('Page {:page} of {:pages}, showing {:current} records out of {:count} total, starting on record {:start}, ending on {:end}') 
    )); 
    ?> </p> 

    <div class="paging"> 
    <?php 
     echo $this->Paginator->prev('< ' . __('previous'), array(), null, array('class' => 'prev disabled')); 
     echo $this->Paginator->numbers(array('separator' => '')); 
     echo $this->Paginator->next(__('next') . ' >', array(), null, array('class' => 'next disabled')); 
    ?> 
    </div> 
</div> 
<div class="actions"> 
    <h3><?php echo __('Actions'); ?></h3> 
    <ul> 
     <li><?php echo $this->Html->link(__('New Condition'), array('action' => 'add')); ?></li> 
    </ul> 
</div> 

控制器:

<?php 
App::uses('AppController', 'Controller'); 
/** 
* Conditions Controller 
* 
* @property Condition $Condition 
*/ 
class ConditionsController extends AppController { 

/** 
* index method 
* 
* @return void 
*/ 
    public function index() { 
    $this->set('title_for_layout','Condition Index'); 
     $this->Condition->recursive = 0; 
     $this->set('conditions', $this->paginate()); 
    } 

/** 
* view method 
* 
* @throws NotFoundException 
* @param string $id 
* @return void 
*/ 
    public function view($id = null) { 
     $this->Condition->id = $id; 
     if (!$this->Condition->exists()) { 
      throw new NotFoundException(__('Invalid condition')); 
     } 
     $this->set('condition', $this->Condition->read(null, $id)); 
    } 

/** 
* add method 
* 
* @return void 
*/ 
    public function add() { 
     if ($this->request->is('post')) { 
      $this->Condition->create(); 
      if ($this->Condition->save($this->request->data)) { 
       $this->Session->setFlash(__('The condition has been saved')); 
       $this->redirect(array('action' => 'index')); 
      } else { 
       $this->Session->setFlash(__('The condition could not be saved. Please, try again.')); 
      } 
     } 
    $drugs = $this->Condition->Drug->find('list',array('fields'=>array('id','generic'))); 
    $this->set(compact('drugs')); 
    } 

/** 
* edit method 
* 
* @throws NotFoundException 
* @param string $id 
* @return void 
*/ 
    public function edit($id = null) { 
     $this->Condition->id = $id; 
     if (!$this->Condition->exists()) { 
      throw new NotFoundException(__('Invalid condition')); 
     } 
     if ($this->request->is('post') || $this->request->is('put')) { 
      if ($this->Condition->save($this->request->data)) { 
       $this->Session->setFlash(__('The condition has been saved')); 
       $this->redirect(array('action' => 'index')); 
      } else { 
       $this->Session->setFlash(__('The condition could not be saved. Please, try again.')); 
      } 
     } else { 
      $this->request->data = $this->Condition->read(null, $id); 
     } 
    $drugs = $this->Condition->Drug->find('list',array('fields'=>array('id','generic'))); 
    $this->set(compact('drugs')); 
    } 

/** 
* delete method 
* 
* @throws MethodNotAllowedException 
* @throws NotFoundException 
* @param string $id 
* @return void 
*/ 
    public function delete($id = null) { 
     if (!$this->request->is('post')) { 
      throw new MethodNotAllowedException(); 
     } 
     $this->Condition->id = $id; 
     if (!$this->Condition->exists()) { 
      throw new NotFoundException(__('Invalid condition')); 
     } 
     if ($this->Condition->delete()) { 
      $this->Session->setFlash(__('Condition deleted')); 
      $this->redirect(array('action' => 'index')); 
     } 
     $this->Session->setFlash(__('Condition was not deleted')); 
     $this->redirect(array('action' => 'index')); 
    } 
} 
+0

就像你想要实现的一样[this](http://stackoverflow.com/questions/11986746/cakephp-find-all-query-on-multiple-models) ? – Hoff 2012-08-17 16:46:47

+0

第22行在哪里? – 2012-08-17 17:11:31

+0

@ALS第22行是'foreach($ condition ['Drug'] as $ drug):'@Hoff如果不改变关系,是不可能的?我正在生成所有药物的药物复选框列表。所以当添加新的条件时,他们可以检查相关的药物。我不确定改变这种关系是否也需要改变这种关系。它看起来像我需要一个查找调用每个条件ID? – Jonathan 2012-08-17 17:51:16

回答

1

要包括的habtm数据,您需要$递归= 1; 你已经将它设置为0

+0

哈哈哈!这太小又简单。非常感谢你! – Jonathan 2012-08-17 18:26:27