形成一对多的关系

时间:2013-11-30 04:55:47

标签: silverstripe

我正在Silverstripe中开发一对多的关系并尝试对其进行主题化,但我无法在页面上获得很多部分。对象的has_many定义为:

public static $has_many = array(
    'PortsPages' => 'PortsPage'
);

当我尝试使用

循环它时
<% loop $PortsPages %>
    <li>$Title</li>
<% end_loop %>

只有一条记录回来($ Title没有 - $ Name返回PortsPage - 而不是对象的标题),尽管数据库中有2条。我相信我使用的是3.1版本,而且我已经完成了http://doc.silverstripe.org/framework/en/tutorials/5-dataobject-relationship-management,这对我没有帮助(并且尚未针对最新版本进行更新)。

编辑:

$has_one的定义如下:

private static $has_one = array(
    'CityPage' => 'CityPage'
);

当我查看PortsPage表时,似乎链接在那里(有一个填充的CityPageID列并且看起来正确)。当我查看PortsPage_Live时,未填充CityPageID列。

2 个答案:

答案 0 :(得分:4)

如果您使用的是SilverStripe 3.1版,则需要制作静态变量&#34; private&#34;不是&#34;公共&#34;。

schellmax指出失踪的&#34; s&#34;。

是正确的

$ Title只会返回一些内容,如果你的DataObject&#34; PortsPage&#34;将其作为其对象属性之一。

<% loop $PortsPages %>
    <li>$Title</li>
<% end_loop %>

此外,如果SiteTree中的PortsPages是根级别页面的直接子级,您可以使用&lt;%loop Children%&gt;在模板引擎中访问它们。

答案 1 :(得分:1)

虽然Cam是正确的编程解决方案,但事实证明我的错误在于它们在管理端没有正确链接。

虽然我从城市中选择了端口,但仍然需要进入每个端口并保存并发布它们(虽然我认为在链接它们之前我已经发布了它们)。

让我感到惊讶的是,我查看了PortsPage页面表中的CityPageID列是否正确,但是当我查看PortsPage_Live表时,CityPageID列仍为0。