Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Прошу совета:
У меня есть редактируемые параметры сайта. Сейчас это хранится как таблица с единственной записью из 45 полей. И есть тенденция к росту Я хочу "перевернуть" её чтобы получить таблицу из двух колонок вида (имя, значение). Так как значения могут быть самыми разными, я беру тип text. Кеширование оставим пока в стороне, вопрос про преобразование типов. Если в сещуствующей структуре я для облаботки селиализованного значения я могу просто додавить имя поля в свойство $casts, то в новой структуре я теряю такое удобство.
Есть ли готовые решения для кастования значений из некоторых записей, а не из полей?
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Как вариант добавить третью колонку для хранения типа каста.
ну и потом в свитче кастить в нужный формат. переопределить метод __get() или getAttribute() для модели и туда свитч этот засунуть.
больше склоняюсь ко второму методу, потому что там как раз работа с мутаторами
родная реализация метода:
public function __get($key)
{
return $this->getAttribute($key);
}
Изменено Eskono (15.02.2019 12:21:04)
Не в сети
В свое время решил проблему переопределением метода getCastType
class UserOption extends Model
{
protected $fillable = [
'key',
'value'
];
/**
* Атрибуты, которые нужно преобразовать в нативный тип.
*
* @var array
*/
protected $casts = [
'value' => 'string',
'sms_user_limit' => 'int'
];
/**
* Override getCastType
*
* @param string $key
* @return mixed|string
*/
protected function getCastType($key)
{
if ($key == 'value' && !empty($this->casts[$this->key])) {
return $this->casts[$this->key];
}
return parent::getCastType($key);
}
}
Не в сети
Страницы 1