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