2014-09-03 41 views
1

我有两个连接,'mysql'和'mysql2'托管在两个不同的盒子上。Laravel中查询跨两个连接的最有效方法

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

我使用名为'付款'的模型从'mysql2'中提取数据,并且'payment'中有一个名为'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'); 
} 
+0

是不是更可行的使用同一个数据库的两个表? – Sacha 2014-09-03 11:24:39

+0

这可能是肯定的;但不幸的是不可能。用户数据库是一个在强大的机器上托管的游戏的帐户,并且外部托管的网站是支付的地方。上次我们尝试在外部托管我们的网站,而不是本地主机,它以蜗牛速度运行:x – user2087032 2014-09-03 11:31:24

回答

0

尝试增加 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

+0

谢谢,正确的连接已经建立。对不起,我的原始文章没有。 – user2087032 2014-09-03 11:31:59

+0

尝试我在编辑中建议:) – Sacha 2014-09-03 11:38:40

+0

不幸运:(一旦有人在后台登录游戏,我决定将用户名和其他数据保存在网站主机框中。不是真正的解决方法,我想..但它的工作原理目前 – user2087032 2014-09-03 17:42:49