0

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

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

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

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

而且似乎都不起作用。

谢谢!

4

2 回答 2

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

于 2012-11-08T22:12:03.143 回答
0
DataList::create('Post')->filter(array('URLSegment' => $segment))->First();

也将工作。

于 2012-11-09T07:01:22.167 回答