【问题标题】:Most efficient way in Laravel to query across two connectionsLaravel 中跨两个连接查询的最有效方法
【发布时间】:2014-10-27 20:50:19
【问题描述】:

我有两个连接,“mysql”和“mysql2”托管在两个不同的盒子上。

在“mysql”上有一个名为“account”的表,在“mysql2”上有一个名为“payments”的表,它使用 PayPal IPN 接受付款。

我正在使用名为“Payment”的模型从“mysql2”中提取数据,“payments”上有一个名为“custom”的字段,其中包含进行 PayPal 付款的用户 ID。我想以某种方式将这两个“链接”起来,以便我可以提取付款人的用户名。

我相信 leftJoin 在这种情况下不起作用,因为它跨越两个连接,Eloquent 的关系方法会起作用吗?我试过用它们无济于事。

我的查询是这样的:

$top_donators = Payment::selectRaw('month(created_at) as month, year(created_at) as year, sum(mc_gross) as amount, custom')
                                ->groupBy('year', 'month', 'custom')
                                ->orderBy('amount','desc')
                                ->get();

用户模型关系

public function payment()
    {
        return $this->hasMany('Payment', 'custom', 'id');
    }

支付模式关系

public function user() {
    return $this->belongsTo('User', 'id');
}

【问题讨论】:

  • 两张表使用同一个数据库不是更可行吗?
  • 可能是的;但不幸的是不可能。用户数据库是托管在功能强大的机器上的游戏的帐户,以及外部托管的网站,这是付款发生的地方。上次我们尝试在外部而不是本地主机上托管我们的网站时,它以蜗牛的​​速度运行:x

标签: laravel laravel-4 eloquent


【解决方案1】:

尝试添加 protected $connection = 'mysql'; 给你的Accounts 模型,protected $connection = 'mysql2'; 给你的Payments 模型。

在您的关系中,尝试将 [database].[tablename].[columnname] 指定为参数。

例如return $this->belongsTo('User','mysql2.users.id');

来源:http://laravel.io/forum/02-12-2014-many-to-many-relationship-not-working-across-databases

【讨论】:

  • 谢谢,已经建立了正确的连接。抱歉,我原来的帖子中没有。
  • 不走运:(我决定在有人在后台登录游戏后将用户名和其他数据保存在网站主机框中。这不是我想要的解决方法..但它现在有效
猜你喜欢
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多