问题描述
class UserModel extends Model
{
protected $table = 'user';
protected $casts = [
'alias' => 'array'
];
}
直接存 alias 字段,数据库会显示 Unicode 码
["\u7f51\u7ad9\u57df\u540d"]
问题解决
方式一:自定义属性
class UserModel extends Model
{
public function setAliasAttribute($option)
{
$this->attributes['alias'] = json_encode($option, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
}
}
方式二:继承覆写
class UserModel extends Model
{
protected $table = 'user';
protected $casts = [
'alias' => 'array'
];
// 覆盖asJson方法
protected function asJson($value)
{
return json_encode($value, JSON_UNESCAPED_UNICODE);
}
}
方式三:trait复用
<?php
namespace App\Traits;
trait UnicodeJsonTrait
{
/**
* 序列化json
* @param $value
* @return false|string
*/
protected function asJson($value)
{
return json_encode($value, JSON_UNESCAPED_UNICODE);
}
}
- Model里使用Trait
use App\Traits\UnicodeJsonTrait;
class UserModel extends Model
{
//使用Trait
use UnicodeJsonTrait;
protected $table = 'user';
protected $casts = [
'alias' => 'array'
];
}
方式四:自定义转换器Cast子类
class UserModel extends Model
{
protected $table = 'user';
protected $casts = [ //使用自定义转换器类
'alias' => JsonWithoutUnicode::class,
];
}
- 自定义转换器类
<?php
namespace App\Casts;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
// 自定义转换器类
class JsonWithoutUnicode implements CastsAttributes
{
public function get($model, string $key, $value, array $attributes)
{
return json_decode($value, true);
}
public function set($model, string $key, $value, array $attributes)
{
// 直接将值转为JSON字符串,不进行Unicode转义
return json_encode($value, JSON_UNESCAPED_UNICODE);
}
}