方法一:客户端解决
最可靠的方法是 @ExohJosh 所描述的:仅发送事件类型和 ID,以便客户端(很可能是 JavaScript)可以通过单独的 REST(或其他)API 获取更新的记录。
public function broadcastWith()
{
return [
'id' => $this->post->id,
];
}
方法 2:减少有效负载
另一种(更简单)的方法是仅发送客户端所需的数据(您自己找到的数据@sarotnem)。然而,只有当您明确知道您提交的属性在任何情况下都不能超过 10KiB 限制时,这种方法才是安全的。这可以通过输入验证、数据库列限制或其他方式来确保。
选择此方法时,请务必将可能加载到模型上的任何关系的大小也包括在计算中。
Laravel 定义模型“外部表示”的一种巧妙方法是API资源 https://laravel.com/docs/5.6/eloquent-resources。他们可以让你的代码看起来像这样:
public function broadcastWith()
{
return [
'post' => new \App\Http\Resources\PostResource($this->post),
];
}
where App\Http\Resources\PostResource
可能:
class PostResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->title,
'body' => $this->body,
];
}
}