当您有一个数组字段并将其保存在数据库中时,它会对数组执行漂亮的 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/