显示Cakephp中相关表的字段

时间:2012-07-17 13:20:38

标签: cakephp relationship

我对CakePhp中的相关表有一个非常简单的问题。我有两张关于多对多关系的桌子。

我只是想显示相关对象的名称,而不是它的id。

我的界面与控制台完全相同:enter image description here

我在CakePhp docs中找到了recursion参数,我在StackOverflow上发现了很多相关的问题,但仍然失败了。

这是控制器:

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

以下是观点。

<div class="related">
<h3><?php echo __('Related Application Memberships'); ?></h3>
<?php if (!empty($application['ApplicationMembership'])): ?>
<table cellpadding = "0" cellspacing = "0">
<tr>
    <th><?php echo __('Id'); ?></th>
    <th><?php echo __('Chantier Id'); ?></th>
    <th><?php echo __('Application Id'); ?></th>
    <th><?php echo __('Ponderation'); ?></th>
    <th class="actions"><?php echo __('Actions'); ?></th>
</tr>
<?php
    $i = 0;
    foreach ($application['ApplicationMembership'] as $applicationMembership): ?>
    <tr>
        <td><?php echo $applicationMembership['id']; ?></td>
        <td><?php echo $applicationMembership['chantier_id']; ?></td>
        <td><?php echo $applicationMembership['application_id']; ?></td>
        <td><?php echo $applicationMembership['ponderation']; ?></td>
        <td class="actions">
            <?php echo $this->Html->link(__('View'), array('controller' => 'application_memberships', 'action' => 'view', $applicationMembership['id'])); ?>
            <?php echo $this->Html->link(__('Edit'), array('controller' => 'application_memberships', 'action' => 'edit', $applicationMembership['id'])); ?>
            <?php echo $this->Form->postLink(__('Delete'), array('controller' => 'application_memberships', 'action' => 'delete', $applicationMembership['id']), null, __('Are you sure you want to delete # %s?', $applicationMembership['id'])); ?>
        </td>
    </tr>
<?php endforeach; ?>
</table>

2 个答案:

答案 0 :(得分:1)

使用CakePHP的Containable Behavior。每个教程/解释都包括至少500个左右我在StackOverflow上写过自己。

基本上,CakePHP的可包含行为允许您选择要在数据中返回的任何/所有内容,只要这些关联设置正确。

阅读Containable,并尝试一下。如果它仍然不起作用,将其发布为“无法在CakePHP中工作”(或类似的东西)

答案 1 :(得分:1)

如果你是在2015年,试着在cakephp3找到解决方案,这可能会有所帮助:

表 - &GT;人,患者,药物,药物_患者 患者有person_id drug_patients在药物和患者之间是多对多的,并且有其他领域,如startDate和endDate

现在你在drugPatients控制器中,在添加中,你想要用患者的id和人名来填充选择的患者。

这是小菜一碟:

$ patients = $ this-&gt; DrugsPatients-&gt; Patient-&gt; find('list',['keyField'=&gt;'id','valueField'=&gt;'person.name']) - &GT;包含([ '人']);

=)