2013-09-19 2 views
0

я следующий код: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); 
} 

Я могу видеть данные для всех записей.

ответ

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).

+1

хорошо получил тот же нольский ответ, но это было о разрешении. добавить соответствующую функцию canView, например \t public function canView ($ member = null) { \t \t return true; \t} – munomono

Смежные вопросы