2

我开始使用 Zend 框架。我一直在这里和那里做一些教程。

在我的一个观点中,我有这段代码:

<?php foreach($this->Instruments as $Instrument) : ?>
    <tr>
        <td><?php echo $this->escape($Instrument->nom);?></td>
        <td><?php echo $this->escape($Instrument->idtypeofinstrument);?></td>
        <td>
        </td>
    </tr>
<?php endforeach; ?>

idtypeofinstrument是一个外键,现在它只显示id. 我想为用户显示其他更明确的内容。

我的桌子:

+------------------+
| typeofinstrument |
+------------------+
| id               | -- primary key
| typeofinstrument | -- what I want to display
+------------------+

+--------------------+
|     instrument     |
+--------------------+
| id                 | -- primary key
| name               |
| idtypeofinstrument | -- foreign key
+--------------------+
4

1 回答 1

1

做到这一点的简单方法,不是很正确,但很简单。

//escape() removed for clarity
<?php foreach($this->Instruments as $Instrument) : ?>
    <tr>
        <td><?php echo $Instrument->nom;?></td>
        <?php $table = new Application_Model_DbTable_Typeofinstument();
              $select = $table->select()->where('id = ?',$Instrument->idtypeofinstrument);
              $type = $table->fetchRow($select); ?>
        <td><?php echo $type->typeofinstrument;?></td>
        <td>
        </td>
    </tr>
<?php endforeach; ?>

要以更正确的方式执行此操作,需要使用映射器、ORM 或其他解决方案将表中的数据映射到仪器对象。

目标是让您的原始代码返回您想要的数据。

要了解进一步检查:

http://phpmaster.com/building-a-domain-model/

http://phpmaster.com/integrating-the-data-mappers/

这些文章对我理解映射器有很大帮助。

于 2012-09-13T10:29:38.780 回答