@@ -58,6 +58,10 @@ static int php_phongo_is_array_or_document(zval* val)
58
58
int count ;
59
59
60
60
if (Z_TYPE_P (val ) != IS_ARRAY ) {
61
+ if (Z_TYPE_P (val ) == IS_OBJECT && instanceof_function (Z_OBJCE_P (val ), php_phongo_packedarray_ce )) {
62
+ return IS_ARRAY ;
63
+ }
64
+
61
65
return IS_OBJECT ;
62
66
}
63
67
@@ -121,7 +125,6 @@ static void php_phongo_bson_append_object(bson_t* bson, php_phongo_field_path* f
121
125
if (instanceof_function (Z_OBJCE_P (object ), php_phongo_serializable_ce )) {
122
126
zval obj_data ;
123
127
bson_t child ;
124
- bool is_array ;
125
128
126
129
zend_call_method_with_0_params (PHONGO_COMPAT_OBJ_P (object ), NULL , NULL , BSON_SERIALIZE_FUNC_NAME , & obj_data );
127
130
@@ -146,11 +149,9 @@ static void php_phongo_bson_append_object(bson_t* bson, php_phongo_field_path* f
146
149
return ;
147
150
}
148
151
149
- is_array = php_phongo_is_array_or_document (& obj_data ) == IS_ARRAY || (Z_TYPE (obj_data ) == IS_OBJECT && instanceof_function (Z_OBJCE (obj_data ), php_phongo_packedarray_ce ));
150
-
151
152
/* Persistable objects must always be serialized as BSON documents;
152
153
* otherwise, infer based on bsonSerialize()'s return value. */
153
- if (instanceof_function (Z_OBJCE_P (object ), php_phongo_persistable_ce ) || ! is_array ) {
154
+ if (instanceof_function (Z_OBJCE_P (object ), php_phongo_persistable_ce ) || php_phongo_is_array_or_document ( & obj_data ) != IS_ARRAY ) {
154
155
bson_append_document_begin (bson , key , key_len , & child );
155
156
if (instanceof_function (Z_OBJCE_P (object ), php_phongo_persistable_ce )) {
156
157
bson_append_binary (& child , PHONGO_ODM_FIELD_NAME , -1 , 0x80 , (const uint8_t * ) Z_OBJCE_P (object )-> name -> val , Z_OBJCE_P (object )-> name -> len );
0 commit comments