Symfony 1.4 Propel:通过外键访问 Table 数据
Symfony 1.4 Propel: Accessing Table Data via Foreign Key
我需要来自两个 MySQL table 的数据 - 我编写了一个 Propel 查询来从我的 'search' table 中检索数据。现在,我正在尝试在视图中使用 ->getItemView()->getPosition()
从我的 'item_view' table 检索数据。 search_id(搜索table主键)是item_viewtable中的外键,但item_view_id(项目视图主键)不是外键键入搜索 table。有关如何检索此数据的任何建议?下面的代码。
查看:
<?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; ?>
Controller:(注意:我检索用户table数据没问题,因为它的外键在搜索table.
$c = new Criteria();
$c->addDescendingOrderByColumn(SearchPeer::TS);
$this->queries = SearchPeer::doSelect($c);
在这种情况下,您是否无法从 table 中检索数据,除非它的主键是形成推进查询的 table 的外键?
感谢任何解决方案!
我终于找到了我的问题的解决方案,这与 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; ?>
我需要来自两个 MySQL table 的数据 - 我编写了一个 Propel 查询来从我的 'search' table 中检索数据。现在,我正在尝试在视图中使用 ->getItemView()->getPosition()
从我的 'item_view' table 检索数据。 search_id(搜索table主键)是item_viewtable中的外键,但item_view_id(项目视图主键)不是外键键入搜索 table。有关如何检索此数据的任何建议?下面的代码。
查看:
<?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; ?>
Controller:(注意:我检索用户table数据没问题,因为它的外键在搜索table.
$c = new Criteria();
$c->addDescendingOrderByColumn(SearchPeer::TS);
$this->queries = SearchPeer::doSelect($c);
在这种情况下,您是否无法从 table 中检索数据,除非它的主键是形成推进查询的 table 的外键?
感谢任何解决方案!
我终于找到了我的问题的解决方案,这与 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; ?>