2016-03-22 3 views
1

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

У меня есть модель под названием 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,

С кодом followng я получаю контент, но они находятся в формате 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?

+0

Вы пробовали этот print_r ($ event-> result()); – MasoodUrRehman

+0

@MasoodRehman, см. Мое обновление, я не могу привести результат здесь. – seaguest

ответ

0

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