我正在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列。
答案 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。