+ $this->originalData = $data;
+ }
+
+ public function getOriginalData()
+ {
+ return $this->originalData;
+ }
+
+ public function resetOriginalData()
+ {
+ $this->originalData = $this->data;
+ }
+
+ /**
+ * Performance-improved model creation in a loop
+ *
+ * @param BaseModel $prototype
+ * @param array $data
+ * @return BaseModel
+ */
+ public static function createFromPrototype(BaseModel $prototype, array $data)
+ {
+ $model = clone $prototype;
+ $model->data = $data;
+ $model->originalData = $data;
+
+ return $model;
+ }
+
+ /**
+ * Magic isset method. Returns true if the field exists, either in the data prperty array or in any of the local properties.
+ * Used by array_column() on an array of objects.
+ *
+ * @param $name
+ * @return bool
+ */
+ public function __isset($name)
+ {
+ return in_array($name, array_merge(array_keys($this->data), array_keys(get_object_vars($this))));