File tree Expand file tree Collapse file tree 2 files changed +61
-0
lines changed Expand file tree Collapse file tree 2 files changed +61
-0
lines changed Original file line number Diff line number Diff line change @@ -195,6 +195,52 @@ public function getTable()
195
195
return parent ::getTable ();
196
196
}
197
197
198
+ /**
199
+ * Get an attribute from the model.
200
+ *
201
+ * @param string $key
202
+ * @return mixed
203
+ */
204
+ public function getAttribute ($ key )
205
+ {
206
+ // Check if the key is an array dot notation.
207
+ if (strstr ($ key , '. ' ))
208
+ {
209
+ $ attributes = array_dot ($ this ->attributes );
210
+
211
+ if (array_key_exists ($ key , $ attributes ))
212
+ {
213
+ return $ this ->getAttributeValue ($ key );
214
+ }
215
+ }
216
+
217
+ return parent ::getAttribute ($ key );
218
+ }
219
+
220
+ /**
221
+ * Get an attribute from the $attributes array.
222
+ *
223
+ * @param string $key
224
+ * @return mixed
225
+ */
226
+ protected function getAttributeFromArray ($ key )
227
+ {
228
+ if (array_key_exists ($ key , $ this ->attributes ))
229
+ {
230
+ return $ this ->attributes [$ key ];
231
+ }
232
+
233
+ else if (strstr ($ key , '. ' ))
234
+ {
235
+ $ attributes = array_dot ($ this ->attributes );
236
+
237
+ if (array_key_exists ($ key , $ attributes ))
238
+ {
239
+ return $ attributes [$ key ];
240
+ }
241
+ }
242
+ }
243
+
198
244
/**
199
245
* Set a given attribute on the model.
200
246
*
Original file line number Diff line number Diff line change @@ -419,4 +419,19 @@ public function testRaw()
419
419
$ this ->assertTrue (is_array ($ result ));
420
420
}
421
421
422
+ public function testDotNotation ()
423
+ {
424
+ $ user = User::create (array (
425
+ 'name ' => 'John Doe ' ,
426
+ 'address ' => [
427
+ 'city ' => 'Paris ' ,
428
+ 'country ' => 'France ' ,
429
+ ]
430
+ ));
431
+
432
+ $ this ->assertEquals ('Paris ' , $ user ->getAttribute ('address.city ' ));
433
+ $ this ->assertEquals ('Paris ' , $ user ['address.city ' ]);
434
+ $ this ->assertEquals ('Paris ' , $ user ->{'address.city ' });
435
+ }
436
+
422
437
}
You can’t perform that action at this time.
0 commit comments