我在Silverstripe 2.x项目中使用了以下查询:
$obj = DataObject::get_one('Post', "\"URLSegment\" = '$segment'")
有谁知道如何在新的ORM中复制此查询? 我试过了:
$obj = Post::get()->filter("\"URLSegment\" = '$segment'")
$obj = Post::get()->where("\"URLSegment\" = '$segment'")
似乎都不起作用。
谢谢!
答案 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();
也会奏效。