use Doctrine\DBAL\Schema\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
+use Illuminate\Support\Arr;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Str;
}
}
- public function getAttribute($key)
- {
- $value = parent::getAttribute($key);
- $f = $this->getField($key);
- if (null === $f) {
- return $value;
- }
- return $f->filterValue($value);
- }
protected function _randCollectionName($fieldname)
{
}
}
+ public function setAttribute($key, $value)
+ {
+ $f = $this->getField($key);
+ if (null === $f || !$f->getAttribute('fake', false)) {
+ return parent::setAttribute($key, $value);
+ }
+ $k = $f->getAttribute('store_in', 'extras');
+ $fv = $this->_getFakeValues($k);
+ Arr::set($fv, $key, $value);
+ $this->$k = $fv;
+
+ return $this;
+ }
+
+ protected function _getFakeValues($storedIn)
+ {
+ $fv = $this->$storedIn;
+ if (is_string($fv) && Json::isJson($fv)) {
+ $fv = Json::decode($fv, true);
+ }
+ return $fv;
+ }
+
+ public function getAttribute($key)
+ {
+ $f = $this->getField($key);
+ if (null === $f || !$f->getAttribute('fake', false)) {
+ $value = parent::getAttribute($key);
+ } else {
+ $k = $f->getAttribute('store_in', 'extras');
+ $fv = $this->_getFakeValues($k);
+ $value = Arr::get($fv, $key);
+ }
+
+ if (null === $f) {
+ return $value;
+ }
+
+ return $f->filterValue($value);
+ }
+
+
public function replaceMediaInField($fieldname, $filepath, $preserveOriginal = false)
{
$this->deleteMediaInField($fieldname);