From 1e53e537c66d5d47f31376ac9e5a2118b0792aef Mon Sep 17 00:00:00 2001 From: Vladimir Kolesnikov Date: Tue, 26 Nov 2013 22:38:20 +0200 Subject: [PATCH] Backport #1506 from 1.2.5 --- ext/mvc/model/row.c | 18 ++++++++++++++++++ ext/mvc/model/row.h | 4 +++- unit-tests/ModelsTest.php | 11 ++++++++++- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/ext/mvc/model/row.c b/ext/mvc/model/row.c index 0b4209c9394..a9eb7ec48d4 100644 --- a/ext/mvc/model/row.c +++ b/ext/mvc/model/row.c @@ -141,3 +141,21 @@ PHP_METHOD(Phalcon_Mvc_Model_Row, offsetUnset){ return; } +/** + * Returns the instance as an array representation + * + * @return array + */ +PHP_METHOD(Phalcon_Mvc_Model_Row, toArray){ + + HashTable *properties; + + properties = Z_OBJ_HT_P(this_ptr)->get_properties(this_ptr TSRMLS_CC); + + if (!properties) { + RETURN_FALSE; + } + + array_init_size(return_value, zend_hash_num_elements(properties)); + zend_hash_copy(Z_ARRVAL_P(return_value), properties, (copy_ctor_func_t)zval_add_ref, NULL, sizeof(zval*)); +} diff --git a/ext/mvc/model/row.h b/ext/mvc/model/row.h index bc71e9364a8..fcebf7814eb 100644 --- a/ext/mvc/model/row.h +++ b/ext/mvc/model/row.h @@ -26,6 +26,7 @@ PHP_METHOD(Phalcon_Mvc_Model_Row, offsetExists); PHP_METHOD(Phalcon_Mvc_Model_Row, offsetGet); PHP_METHOD(Phalcon_Mvc_Model_Row, offsetSet); PHP_METHOD(Phalcon_Mvc_Model_Row, offsetUnset); +PHP_METHOD(Phalcon_Mvc_Model_Row, toArray); ZEND_BEGIN_ARG_INFO_EX(arginfo_phalcon_mvc_model_row_setdirtystate, 0, 0, 1) ZEND_ARG_INFO(0, dirtyState) @@ -53,7 +54,8 @@ PHALCON_INIT_FUNCS(phalcon_mvc_model_row_method_entry){ PHP_ME(Phalcon_Mvc_Model_Row, offsetExists, arginfo_phalcon_mvc_model_row_offsetexists, ZEND_ACC_PUBLIC) PHP_ME(Phalcon_Mvc_Model_Row, offsetGet, arginfo_phalcon_mvc_model_row_offsetget, ZEND_ACC_PUBLIC) PHP_ME(Phalcon_Mvc_Model_Row, offsetSet, arginfo_phalcon_mvc_model_row_offsetset, ZEND_ACC_PUBLIC) - PHP_ME(Phalcon_Mvc_Model_Row, offsetUnset, arginfo_phalcon_mvc_model_row_offsetunset, ZEND_ACC_PUBLIC) + PHP_ME(Phalcon_Mvc_Model_Row, offsetUnset, arginfo_phalcon_mvc_model_row_offsetunset, ZEND_ACC_PUBLIC) + PHP_ME(Phalcon_Mvc_Model_Row, toArray, NULL, ZEND_ACC_PUBLIC) PHP_FE_END }; diff --git a/unit-tests/ModelsTest.php b/unit-tests/ModelsTest.php index 516708d5ed8..f39b0b64d0f 100644 --- a/unit-tests/ModelsTest.php +++ b/unit-tests/ModelsTest.php @@ -467,6 +467,16 @@ protected function _executeTestsNormal($di){ // Issue 1314 $parts = new Parts2(); $parts->save(); + + // Issue 1506 + $persona = Personas::findFirst(array('columns' => 'nombres, telefono, estado', "nombres = 'LOST CREATE'")); + $expected = array( + 'nombres' => 'LOST CREATE', + 'telefono' => '1', + 'estado' => 'A' + ); + + $this->assertEquals($expected, $persona->toArray()); } protected function _executeTestsRenamed($di) @@ -718,5 +728,4 @@ protected function _executeTestsRenamed($di) $personer->refresh(); $this->assertEquals($personerData, $personer->toArray()); } - }