【问题标题】:Laravel Control Eloquent EventsLaravel 控制 Eloquent 事件
【发布时间】:2015-11-19 14:29:30
【问题描述】:

我有一个场景。我们已将第三方应用程序与我们的 laravel 应用程序集成。一开始我们有一个场景,每当创建、更新和删除客户端或项目时,我们都需要将相关数据发送到第三方应用程序。例如,如果在我的 Web 应用程序上创建客户端,我们还需要在第三方应用程序上创建,更新和删除也是如此。所以我在应用服务提供商中捕获了 Laravel 雄辩的事件,例如

Client::created(function($client) use($integration) {
        $integration->sendDataToIntegratedApps('client.create', $client);
});

Client::updated(function($client) use($integration) {
        $integration->sendDataToIntegratedApps('client.update', $client);
});

Client::deleting(function($client) use($integration) {
        $integration->sendDataToIntegratedApps('client.delete', $client);

});

它运行良好。但是现在我们有另一个要求,每当在第三方应用程序上创建/更新/删除客户端时,我们也需要在我们的 Web 应用程序上进行创建/更新/删除。

第三方通过 webhook 发送数据,我们接收数据,当我们尝试在 web 应用程序上进行创建/更新/删除操作时,上述事件也被触发,数据再次发送到第三方应用程序。例如,在第三方应用程序上创建了一个客户端,它会将创建的客户端的数据发送到我们的 Web 应用程序。我们在我们的网络应用程序上创建客户端。但是当客户端被创建时,Client::created 事件被触发并且数据被再次发送到错误的第三方应用程序。

所以现在我想要什么,

如果在我们的网络应用上创建了数据,则应该触发事件。但是,如果我们首先从第三方应用程序获取数据,然后创建/更新/删除上述事件,则不应触发上述事件。有什么方法可以控制此类事件或是否有其他方法可以完成此任务?

【问题讨论】:

    标签: laravel laravel-5 eloquent


    【解决方案1】:

    如果您将 Eloquent ORM 用于 CRUD ,也来自第三方 APP 请求,它应该再次触发模型事件。

    您必须为此 CRUD(来自第三方的请求)使用查询生成器,然后它不应触发模型事件。或者您必须设置某种标志来识别来自第三方的请求,并且应该跳过模型事件触发。

    希望它有意义..

    【讨论】:

    猜你喜欢
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 2013-02-12
    • 2021-09-19
    • 1970-01-01
    • 2016-09-11
    相关资源
    最近更新 更多