Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Коллеги, подскажите как выводить типизированные опции из таблицы типа кеу-value?
Схема таблицы:
Schema::create('user_options', function (Blueprint $table) {
$table->increments('id');
$table->increments('user_id');
$table->string('key', 128);
$table->string('value', 128);
});
Код модели:
class UserOption extends Model
{
protected $fillable = [
'key',
'value'
];
/**
* Атрибуты, которые нужно преобразовать в нативный тип.
*
* @var array
*/
protected $casts = [
'sms_user_limit' => 'int'
];
}
Как сейчас получаю опции пользователя:
$userOptions = UserOption::all()
->where('user_id', Auth::user()->id)
->pluck('value', 'key');
Сейчас все value опций выдаются как string, а хотелось бы указывать типизацию для определенных key. К примеру для ключа sms_user_limit - выводить его значение как int, на подобии как реализован $casts в модели. Подскажите красивое решение пжлст (возможно оно уже и есть в ларавел...)
Есть сейчас:
{"success":true,"code":0,"data":{"demo":"test","sms_gateway_id":"1","sms_user_limit":"82","language":"ru"}}
Хочу получить:
{"success":true,"code":0,"data":{"demo":"test","sms_gateway_id":1,"sms_user_limit":82,"language":"ru"}}
Изменено kagatan (29.08.2018 17:26:18)
Не в сети
Сам спросил, сам ответил
Пока что выкрутился добавив override метода 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