@@ -53,15 +53,17 @@ class Complex extends Resultset implements ResultsetInterface
53
53
public function __construct(
54
54
var columnTypes,
55
55
<ResultInterface> result = null ,
56
- var cache = null
56
+ var cache = null ,
57
+ manager = null ,
58
+ metaData = null
57
59
)
58
60
{
59
61
/**
60
62
* Column types, tell the resultset how to build the result
61
63
*/
62
64
let this -> columnTypes = columnTypes;
63
65
64
- parent :: __construct(result, cache);
66
+ parent :: __construct(result, cache, manager, metaData );
65
67
}
66
68
67
69
/**
@@ -71,7 +73,7 @@ class Complex extends Resultset implements ResultsetInterface
71
73
{
72
74
var row, hydrateMode, eager, dirtyState, alias, activeRow, type, column,
73
75
columnValue, value, attribute, source, attributes, columnMap,
74
- rowModel, keepSnapshots, sqlAlias, modelName;
76
+ rowModel, keepSnapshots, sqlAlias, modelName, uuid, model ;
75
77
76
78
let activeRow = this -> activeRow;
77
79
@@ -170,35 +172,50 @@ class Complex extends Resultset implements ResultsetInterface
170
172
if ! fetch keepSnapshots, column[" keepSnapshots" ] {
171
173
let keepSnapshots = false ;
172
174
}
175
+ /**
176
+ * checks for session cache and returns already in memory models
177
+ */
178
+ let value = null ;
179
+ if true === globals_get(" orm.session_cache" ) {
180
+ let modelName = get_class(column[" instance" ]);
181
+ let model = new {modelName}();
182
+ let uuid = this -> metaData-> getModelUUID(model, row);
183
+ let value = this -> sessionCache-> get (uuid);
184
+ }
173
185
174
- if globals_get(" orm.late_state_binding" ) {
175
- if column[" instance" ] instanceof Model {
176
- let modelName = get_class(column[" instance" ]);
186
+ if null === value {
187
+ if globals_get(" orm.late_state_binding" ) {
188
+ if column[" instance" ] instanceof Model {
189
+ let modelName = get_class(column[" instance" ]);
190
+ } else {
191
+ let modelName = " Phalcon\\ Mvc\\ Model" ;
192
+ }
193
+
194
+ let value = {modelName}:: cloneResultMap(
195
+ column[" instance" ],
196
+ rowModel,
197
+ columnMap,
198
+ dirtyState,
199
+ keepSnapshots
200
+ );
177
201
} else {
178
- let modelName = " Phalcon\\ Mvc\\ Model" ;
202
+ /**
203
+ * Get the base instance. Assign the values to the
204
+ * attributes using a column map
205
+ */
206
+ let value = Model:: cloneResultMap(
207
+ column[" instance" ],
208
+ rowModel,
209
+ columnMap,
210
+ dirtyState,
211
+ keepSnapshots
212
+ );
213
+ }
214
+ if true === globals_get(" orm.session_cache" ) {
215
+ this -> sessionCache-> set (uuid, value);
216
+ value-> setModelUUID(uuid);
179
217
}
180
-
181
- let value = {modelName}:: cloneResultMap(
182
- column[" instance" ],
183
- rowModel,
184
- columnMap,
185
- dirtyState,
186
- keepSnapshots
187
- );
188
- } else {
189
- /**
190
- * Get the base instance. Assign the values to the
191
- * attributes using a column map
192
- */
193
- let value = Model:: cloneResultMap(
194
- column[" instance" ],
195
- rowModel,
196
- columnMap,
197
- dirtyState,
198
- keepSnapshots
199
- );
200
218
}
201
-
202
219
break ;
203
220
204
221
default :
0 commit comments