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


Symfony 1.4 Propel: Accessing Table Data via Foreign Key

我需要来自两个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);

在这种情况下,除非表的主键是形成推进查询的表的外键,否则无法从表中检索数据?

任何解决方案都值得赞赏!

我终于找到了解决问题的方法,这与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; ?>