Laravel 通知序列化问题

Laravel notification serialization problem

我正在使用 Laravel 通知来通知用户某些事情。一切都按预期工作,但在某些情况下我会遇到下一个错误。

(1/1) InvalidPayloadException
Unable to JSON encode payload. Error code: 5

当我收到这些错误时,我注意到的是,被通知的用户在用户 table 的 BLOB 列中有数据。我的猜测是由于某种原因 Laravel 无法序列化 BLOB 列中包含的值,因此我得到了上面显示的错误。

实际上,如果我将该列的值更改为 NULL,通知过程将完美运行。我尝试在 User 模型中使用 hidden 和 cast 属性,但没有用。

阅读文档后,我还没有找到更改序列化的方法,因此我可以让它工作。有什么办法可以改变这种行为吗?

感谢您的评论。提前致谢!

正如您自己发现的那样 JSON 不接受二进制数据,这里的技巧是对 BLOB 进行编码到 base64 所以它可以在 JSON 中使用,唯一的缺点是当你检索 JSON

您可以在模型上使用 accessor,以便在 ModelJSON中序列化,即:

// in User Model
public function getBlobAttribute($value)
{
    return base64_encode($value);
}

你只需要记住解码 BLOB当你使用它作为真正的二进制数据(例如,如果它是图像),即:

$blob = base64_decode($model->blob)

或者您可以编写一个方法,使用 accessor:

在不使用 的情况下检索 blob
// in User Model
public function getRawBlob()
{
    $this->getOriginal('blob');
}

希望对您有所帮助。