Silverstripe 3查询变量

时间:2012-11-08 16:59:28

标签: silverstripe

我在Silverstripe 2.x项目中使用了以下查询:

$obj = DataObject::get_one('Post', "\"URLSegment\" = '$segment'")

有谁知道如何在新的ORM中复制此查询? 我试过了:

$obj = Post::get()->filter("\"URLSegment\" = '$segment'")
$obj = Post::get()->where("\"URLSegment\" = '$segment'")

似乎都不起作用。

谢谢!

2 个答案:

答案 0 :(得分:1)

您遇到的问题是DataObject :: get()将返回一个对象集合,而DataObject :: get_one()将返回指定类的单个对象。 Silverstripe 3等价物是:

$obj = Post::get()->where("\"URLSegment\" = '$segment'")->First();

使用此方案(与SS2一样),您需要确保明确注意转义以避免注入漏洞。但是filter函数现在将为您处理。所以你现在真正想要的是:

$obj = Post::get()->filter('URLSegment', $segment)->First();

相关文档位于:http://doc.silverstripe.org/framework/en/topics/datamodel

答案 1 :(得分:0)

DataList::create('Post')->filter(array('URLSegment' => $segment))->First();

也会奏效。