Как преобразовать результаты хранимой процедуры в список объектов, а затем преобразовать в JSON в CI?

Я использую CodeIgniter 2.2.6 + DataMapper, у меня есть вопрос относительно того, как преобразовать результаты хранимой процедуры в модели DataMapper, а затем преобразовать их в json.

У меня есть модель под названием Event:

class Event extends DataMapper {
var $table = 'EVENT';   // map to EVENT table
}

с помощью следующего кода я могу легко получить 10 лучших событий:

$event = new Event();
$event->get( 10, 0 );
$event->all_to_json(); //this convert the result to json following the table structure

Теперь у меня есть хранимая процедура getSpecialEvent (), результат этого SP имеет точно такую ​​же структуру, что и таблица EVENT,

С помощью следующего кода я получаю контент, но в формате Array:

$sql = "call getSpecialEvent()";
$event = new Event();
$event = $this->db->query ($sql);
print_r ($event->result_array());

это вернет что-то вроде этого:

Array
(
[0] => Array
(
[event_id] => 11
[title] => Test1
...
)

[1] => Array
(
[event_id] => 2
[title] => Test1
...
)

)

если я использую это

foreach ( $event as $obj ) {
print_r($obj);
}

Я получаю пустой массив:

Array
(
)
Array
(
)

тогда я попробовал

print_r ($event->result());

это возвращается

Array
(
[0] => stdClass Object
(
[event_id] => 11
[title] => Test1
...
)

[1] => stdClass Object
(
[event_id] => 2
[title] => Test2
...
)
}

Я использовал некоторый код, найденный в интернете, для приведения объекта stdClass к событию, он выглядит нормально, но когда я вызываю метод to_json (), он не работает.

function objectToObject($instance, $className) {
return unserialize(sprintf(
'O:%d:"%s"%s',
strlen($className),
$className,
strstr(strstr(serialize($instance), '"'), ':')
));
}foreach ( $event->result() as $obj ) {
$newObj = $this->objectToObject($obj, "Event");
print_r ($newObj);
print_r ($newObj->to_json());
}

Я распечатал он отлитый предмет, вот он:

    Event Object
(
[table] => EVENT
[error] =>
[stored] =>
[model] =>
[primary_key] => id
[valid] =>
[cascade_delete] => 1
[fields] => Array
(
)

[all] => Array
(
)

[parent] => Array
(
)

[validation] => Array
(
)

[has_many] => Array
(
)

[has_one] => Array
(
)

[production_cache] =>
[free_result_threshold] => 100
[default_order_by] =>
[_validated:protected] =>
[_force_validation:protected] =>
[_instantiations:protected] =>
[_field_tracking:protected] =>
[_query_related:protected] => Array
(
)

[_include_join_fields:protected] =>
[_force_save_as_new:protected] =>
[_where_group_started:protected] =>
[_group_count:protected] => 0

[event_id] => 11
[title] => test11
...
)

но $ newObj-> to_json () возвращает пустой

    Array
(
)
Array
(
)

если я сделаю небольшой тест

$event = new Event ();
$event->event_id = 13;
$event->title = "xxxxx";
echo json_encode($event->to_json());

Я получаю:

{"event_id":13,"title":"xxxxx"....}

Я не знаю, почему приведенный объект не работает с to_json?

1

Решение

Кажется, это ограничение: приведенный объект DataMapper (здесь Event) не воспринимается как реальный объект DataMapper, затем я создаю метод в Event для экспорта необходимой информации в другую объектную модель и использования json_encode (), это работает.

0

Другие решения

Других решений пока нет …