public function pref($key, $value = null, $type = 'string') { if (isset($value)) { $this->preferences()->updateOrCreate(['key' => $key], ['value' => $this->cast($value, $type), 'type' => $type]); return $value; } $default = Preference::getDefault($this, $key); return ($pref = $this->preferences()->forKey($key)->first()) ? $pref->value() : $default->value(); }