Silverstripe convertDataObjectSet无法正常工作

时间:2013-09-19 13:30:14

标签: silverstripe

我有以下代码:

$data = DataObject::get('Property',"SoftDelete=0 AND Bedrooms >= ".$minBeds." AND Price<='". $maxPrice."'","Price ASC");
$f1 = new JSONDataFormatter(); 
return $f1->convertDataObjectSet($data); 

然而,答案是:

{"totalSize":null,"items":[]}

DataObject中肯定有记录,就好像我一样:

$data = DataObject::get('Property',"SoftDelete=0 AND Bedrooms >= ".$minBeds." AND Price<='". $maxPrice."'","Price ASC");
foreach($data as $dataobj){
print_r($data);
}

我可以看到所有记录的数据。

1 个答案:

答案 0 :(得分:1)

在迭代之前,ORM实际上并不执行查询,这解释了为什么在使用foreach循环$data时存在结果,而不是仅仅编写get(...)语句。

解决方案是在DataList上使用toArray()方法然后执行查询,您将在数组中得到结果:

$data = DataObject::get('Property',"SoftDelete=0 AND Bedrooms >= ".$minBeds." AND Price<='". $maxPrice."'","Price ASC")->toArray();

(请注意,这可能/会引发错误,因为没有结果,因此可能需要首先检查->count()

convertDataObjectSet()似乎将SS_List作为参数,因此您可能需要像$data一样转换$data = ArrayList::create( $data )(不确定)。