Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 5.x » Кастинг некоторых записей (талица site_settings) » 08.03.2019 23:12:28

В свое время решил проблему переопределением метода 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);
    }
}

#2 Re: Laravel 5.x » Casts для key=>value » 08.09.2018 00:08:38

Сам спросил, сам ответил smile
Пока что выкрутился добавив 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);
    }
}

#3 Laravel 5.x » Casts для key=>value » 29.08.2018 17:09:46

kagatan
Ответов: 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"}}

Подвал раздела