php - Laravel 5 模型 $cats 到数组 utf-8 JSON_UNESCAPED_UNICODE

标签 php laravel laravel-5 laravel-5.2

当您有一个数组字段并将其保存在数据库中时,它会对数组执行漂亮的 json_encode 但没有 JSON_UNESCAPED_UNICODE 选项。数据最终是这样的:

{"zh":"\u039d\u03ad\u03b1"}

这几乎没用。解决方案当然是使用 JSON_UNESCAPED_UNICODE 标志进行 json_encode。 是否可以告诉 Laravel 在保存模型之前添加此选项?

我试图避免使用 setNameAttribute 突变器,因为每次我有这种类型的字段时这样做都会很痛苦

最佳答案

只需覆盖 asJson() 方法即可。

class Cat extends Model
{

    // ...

    protected function asJson($value)
    {
        return json_encode($value, JSON_UNESCAPED_UNICODE);
    }

}

如果您不想为所有模型重复该方法,只需将该方法提取到一个抽象类中即可:

abstract class UnicodeModel extends Model 
{
    protected function asJson($value)
    {
        return json_encode($value, JSON_UNESCAPED_UNICODE);
    }
}

现在您继承自 UnicodeModel 而不是 Model:

class Cat extends UnicodeModel 
{
    // ...
}

如果您需要更精细的转换控制,您可以覆盖 setAttribute 方法,例如:

class Cat extends Model
{

    // ...

    public function setAttribute($key, $value)
    {

        // take special care for the attributes foo, bar and baz
        if (in_array($key, ['foo', 'bar', 'baz'])) {
            $this->attributes[$key] = json_encode($value, JSON_UNESCAPED_UNICODE);

            return $this;
        }

        // apply default for everything else
        return parent::setAttribute($key, $value);
    }
}

关于php - Laravel 5 模型 $cats 到数组 utf-8 JSON_UNESCAPED_UNICODE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38241424/

相关文章:

php - 授予 Laravel 5 中新角色的权限

php - 如何在 Laravel 中检索 FormData

php - 从 Symfony 1.4 任务记录 Doctrine 查询

php - 我如何计算出平均评分并在我的 MySQL 表中添加一个新列来记录这个

php - Mailgun API 在 Laravel 8.54 中默默失败

mysql - 使用 join 和 order by 时的 Laravel 数据库排序问题

php - 什么是集成测试及其执行方式?

php - 尝试使用 PDO 对照数据库检查用户

laravel - 如何在 Laravel 5.6 中创建多重身份验证?

laravel-5 - 使用 Eloquent 获取具有一种或另一种角色的所有用户