Laravel使用Casts转换类型

640次阅读
没有评论

前言
有时候,数据库里取出的数据,需要我们手动处理相应格式。

比如,某个字段存储的是 json,那么在 orm 取出数据后,手动再 json_encode,处理成我们可识别的样子。

默认的格式类型
官方文档中,明确指出了目前已经定义的类型。传送门

integer
real
float
double
decimal: 例如:decimal:2
string
boolean
object
array
collection
date
datetime
timestamp
encrypted
encrypted:object
encrypted:array
encrypted:collection
自定义格式类型
官方文档:传送门

操作步骤:

php artisan make:cast Json

完善 Json@set 和 Json@get

<?php

namespace App\Casts;

use Illuminate\Contracts\Database\Eloquent\CastsAttributes;

class Json implements CastsAttributes
{
/**
* Cast the given value.
*
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $key
* @param mixed $value
* @param array $attributes
* @return array
*/
public function get($model, $key, $value, $attributes)
{
return json_decode($value, true);
}

/**
 * Prepare the given value for storage.
 *
 * @param  \Illuminate\Database\Eloquent\Model  $model
 * @param  string  $key
 * @param  array  $value
 * @param  array  $attributes
 * @return string
 */
public function set($model, $key, $value, $attributes)
{
    return json_encode($value);
}

}
使用 Json::class

<?php

namespace App\Models;

use App\Casts\Json;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
/**
* The attributes that should be cast.
*
* @var array
*/
protected $casts = [
‘options’ => Json::class,
];
}
最后
casts 的用法还有很多,目前这些已经符合了我当前的使用场景,后续使用到继续补充。

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 
评论(没有评论)