Symfony 1.4 Propel:通过外键访问表数据

时间:2015-03-12 21:43:58

标签: php mysql symfony-1.4 propel

我需要来自两个MySQL表的数据 - 我写了一个Propel查询来从我的'搜索'表中检索数据。现在,我正在尝试使用视图中的->getItemView()->getPosition()从我的'item_view'表中检索数据。 search_id(搜索表主键)是item_view表中的外键,但item_view_id(项目视图主键)不是搜索表中的外键。有关如何检索此数据的任何建议?代码如下。

查看:

<?php foreach ($queries as $query) : ?>
<tr>
    <td><?php echo $query->getTs(); ?></td>
    <td><?php echo $query->getUser() ? $query->getUser()->getEmail() : ""; ?></td>
    <td><?php echo $query->getTerm(); ?></td>
    <td><?php echo $query->getResultCount(); ?></td>
    <td><?php echo **$query->getItemViews()->getItem()->getPartName()**; ?></td>
    <td><?php echo **$query->getItemViews()->getPosition()**; ?></td>
</tr>
<?php endforeach; ?>

控制器:(注意:检索用户表数据没有问题,因为其外键位于搜索表中。

$c = new Criteria();
$c->addDescendingOrderByColumn(SearchPeer::TS);
$this->queries = SearchPeer::doSelect($c);

这是不能从表中检索数据的情况,除非它的主键是为其形成推进式查询的表的外键?

任何解决方案都表示赞赏!

1 个答案:

答案 0 :(得分:0)

我终于找到了我的问题的解决方案,这与Propel和Symfony关系不大,而且与我对关系数据库的理解有关。

单个搜索行可能有多个 item_view行。我最初使用的->getItemView()应该是->getItemViews()因为有一对多的关系。它还需要嵌套为自己的foreach循环来检索值。正确的代码如下:

查看:

<?php foreach ($queries as $query) : ?>
<tr>
    <td><?php echo $query->getTs(); ?></td>
    <td><?php echo $query->getUser() ? $query->getUser()->getEmail() : ""; ?></td>
    <td><?php echo $query->getTerm(); ?></td>
    <td><?php echo $query->getResultCount(); ?></td>
    <?php foreach ($query->getItemViews() as $iav) : ?>
        <td><?php echo $iav->getItem()->getPartName(); ?></td>
        <td><?php echo $iav->getPosition(); ?></td>
    <?php endforeach; ?>
</tr>
<?php endforeach; ?>