使用 socket.io 或 javascript 的访问器从数据库广播检索结果

Broadcast retrieved results from DB with accessors to socket.io or javascript

问题: 我无法在 Laravel 5.4

的 javascript 文件中检索访问器参数

场景:

  1. 获取数据
  2. 使用 Accessors
  3. 修改检索到的数据
  4. 通过事件广播给听众
  5. 使用 socket.io
  6. 在 javascript 中捕获广播事件

App/SomeModel.php 中,我正在使用 Eloquent.

对检索到的数据进行操作

根据优先级编号,我为 bootstrap 样式分配了正确的 class 名称。

/**
 * Gets corresponding class name based on priority level.
 *
 * @return string
 */
public function getPriorityClassAttribute(): string
{
    switch ($this->priority) {
        default:
            return '';
        case 1:
            return 'info';
        case 2:
            return 'success';
        case 3:
            return 'warning';
        case 4:
            return 'danger';
    }
}

然后我可以在整个应用程序的任何地方访问 $somedata->priority_class

但是我无法将这些数据传递给 javascript 中的监听器。我不知道应该如何将它添加到数据对象中。

这是我的活动广播中的 var_dump()

#attributes: array:2 [
"priority" => 2
"id" => 128

]

如果我想要$somedata->priority_class,为什么没有priority_class

有什么建议吗?

知道了!我所要做的就是向 protected $appends 数组插入一个属性;

/**
 * Append accessors to JSON response
 *
 * @var array
 */
protected $appends = [
    'priority_class'
];