在Laravel中用AngularJS模型/视图同步数据库提交


Synchronise database commits in Laravel with AngularJS models/views

我们有一个用PHP Laravel构建的web应用程序,它通过JSON API调用暴露了一堆模式对象。我们希望将模式的变化与AngularJS绑定在一起,这样当数据库更新时,AngularJS模型(以及随后的视图)也会实时更新。

就数据库而言,它可以是任何东西,例如mySQL, SQL Server等。我们有两种方法来考虑这个问题:

  • mySQL提交在Laravel触发某种事件,然后触发对AngularJS中所有相关/侦听模型/视图的调用。
  • 在任何数据被修改(编辑/添加)之前,Laravel向AngularJS触发一个事件。换句话说,在任何成功的DB提交之后,会做另一个"事情"来通知。

第二种方法似乎是显而易见的,干净的方法——因为数据库不涉及堆栈的下层。有更好的方法吗?

这个问题是相关的:如何实现自动视图更新,一旦有变化的数据库在AngularJs?但我不太明白答案中"房间"的概念。

什么(如果有的话)是有效地将数据库提交(推送)绑定到AngularJS视图(渲染更改)的最佳方式?当然,我们希望避免每秒钟都轮询JSON API的更改。

在我的一个项目中也有类似的需求。我们使用node.js和sockjs解决了这个问题。流是这样的:

  1. 有一个node.js + SockJS服务器,所有的客户端都连接到它。
  2. 当db更新时,laravel通过http (redis也是可能的)向node.js发出命令
  3. Node.js将事件广播到所有感兴趣的客户端(这取决于您的业务逻辑)
  4. 客户端重新加载所需的数据,或者如果消息足够小,它可以包含在node.js广播中。

希望这对你有帮助。如果不使用其他技术(node.js/web socket/SSE等),就没有干净的方法来做到这一点。这在很大程度上取决于您的客户端将使用的配置。