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

问题描述 投票:1回答:1

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

protected $connection = "main";

Post db连接是:

protected $connection = "second";

我的通知表已保存到主数据库。我有一个名为“ PostReplied”的通知类,该类使用$post作为参数。因此它在排队时已序列化。当它开始处理此作业时,它正在尝试从“主”数据库而不是Post的连接“第二”数据库获取帖子。

关于如何使通知与跨数据库模型一起使用的任何建议?

php laravel multi-tenant distributed-database
1个回答
0
投票

解决方案1

取决于您使用的多租户设置,它可能取决于在模型上设置连接名称。例如,您可以像这样设置Post模型的连接:

Models / Post.php

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

然后您需要在tenant_connection配置(database.connections)中定义一个config/database.php键。我知道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');        

您可能可以使用雄辩的构建器功能来混合和匹配它。

© www.soinside.com 2019 - 2024. All rights reserved.