使用 socket.io 或 javascript 的访问器从数据库广播检索结果
Broadcast retrieved results from DB with accessors to socket.io or javascript
问题: 我无法在 Laravel 5.4
的 javascript 文件中检索访问器参数
场景:
- 获取数据
- 使用 Accessors
修改检索到的数据
- 通过事件广播给听众
- 使用 socket.io
在 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'
];
问题: 我无法在 Laravel 5.4
的 javascript 文件中检索访问器参数场景:
- 获取数据
- 使用 Accessors 修改检索到的数据
- 通过事件广播给听众
- 使用 socket.io 在 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'
];