Laravel使用Casts转换类型
本文主要用于记录学习,具体操作建议查看更加详细的官方文档。传送门
本文只记录了其中一部分常用的用法。
文中
demo
来自官方文档。
前言
有时候,数据库里取出的数据,需要我们手动处理相应格式。
比如,某个字段存储的是 json
,那么在 orm
取出数据后,手动再 json_encode
,处理成我们可识别的样子。
默认的格式类型
官方文档中,明确指出了目前已经定义的类型。传送门
integer
real
float
double
decimal:<digits>
例如: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
的用法还有很多,目前这些已经符合了我当前的使用场景,后续使用到继续补充。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!