Silverstripe convertDataObjectSet не работает

У меня есть следующий код:

$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);
}

Я вижу данные по всем записям.


person rickyduck    schedule 19.09.2013    source источник


Ответы (1)


ORM на самом деле не выполняет запрос до тех пор, пока он не будет повторен, что объясняет, почему результаты существуют при циклическом переборе $data с foreach, а не просто при написании оператора get(...).

Решение состоит в том, чтобы использовать метод toArray() в вашем DataList, который затем выполнит запрос, и вы получите результаты в массиве:

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

(Обратите внимание, что это может привести к ошибке, если нет результатов, поэтому, возможно, сначала потребуется проверить ->count())

convertDataObjectSet(), кажется, принимает SS_List в качестве параметра, поэтому вам, возможно, придется преобразовать $data (не уверен) вот так $data = ArrayList::create( $data ).

person colymba    schedule 19.09.2013
comment
получил такой же нулевой ответ, но речь шла о разрешении. добавьте соответствующую функцию canView, например, public function canView($member = null) { return true; } - person munomono; 01.08.2014