如何在跨数据库设置中为序列化模型使用laravel通知



我当前的设置是UserNotification保存到我的主数据库,Post保存到另一个数据库。UserNotification数据库连接为:

protected $connection = "main";

并且CCD_ 6db连接是:

protected $connection = "second";

我的通知表保存到主数据库中。我有一个名为"PostReplied"的通知类,它将$post作为参数。所以它在排队时被序列化。当它开始处理这个作业时,它试图从"main"数据库而不是Post的连接"second"数据库获取post。

关于如何使通知与跨数据库模型一起工作,有什么建议吗?

解决方案1

根据您使用的多租户设置,它可能依赖于在模型上设置连接名称。例如,您可以设置Post模型的连接,如下所示:

模型/Post.php

/**
* Get the current connection name for the model.
*
* @return string|null
*/
public function getConnectionName()
{
return 'tenant_connection';
}

然后,您需要在database.connections配置(config/database.php(中定义一个tenant_connection密钥。我知道hyn/multitenant是这样做的(https://packagist.org/packages/hyn/multi-tenant)。

解决方案2

另一种较小的方法是在创建查询时随时切换连接,如下所示:

DB::setDefaultConnection('custom_connection');
Post::query()->where('status', 1)->get();
// Revert to default connection, assuming `mysql` here.
DB::setDefaultConnection('mysql');

这给了你更多的自由,但你的代码会变得更混乱,我不推荐它

解决方案3

这也会使您的代码更难理解。您可以在查询中包含数据库名称,如下所示:

DB::table('database1.posts as d1p')
->leftjoin('database2.users as d2u', 'd1p.user_id', '=', 'd2u.id');        

您可能可以使用Eloquent构建器函数来混合和匹配它。

相关内容

最新更新