0

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

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

我的控制台做的界面和这个一模一样:在此处输入图像描述

我在CakePhp 文档中找到了递归参数,我在 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>

4

2 回答 2

1

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

基本上,只要关联设置正确,CakePHP 的 Containable Behavior 允许您挑选和选择您想要在数据中返回的任何内容/所有内容。

阅读 Containable 并尝试一下。如果它仍然不起作用,请将其发布为“Can't get containable to work in CakePHP”问题(或类似的问题)

于 2012-07-17T14:51:24.420 回答
1

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

Tables-> People, Patients, Drugs,drugs_patients Patient 有 person_id drug_patients 是 Drugs 和 Patients 之间的多对多,还有其他字段,例如 startDate 和 endDate

现在您在添加中的 drugPatients 控制器中,并且您希望使用来自患者的 id 和来自人员的名称填充选择的患者。

这是小菜一碟:

$patients = $this->DrugsPatients->Patients->find('list', ['keyField' => 'id','valueField' => 'person.name'])->contain(['People'] );

=)

于 2015-09-05T01:31:04.593 回答