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 に答える