先來個妹子!
起因:由於不同業務被劃分到不同的資料庫,但是我在運營統計的時候卻要將他們串起來統計比較麻煩,whereHas,withCount,hasManyThrough,hasOneThrough,都不好使,很多關聯的表都不在一個資料庫中。
於是我想到的解決辦法如下:
資料庫 a 有users 表
| id | name |
| ------------ | ------------ |
| 1 | xiaoming |
| 2 | xiaohong |
資料庫 b 有topics 表
| id | user_id | data |
| ------------ | ------------ | ------------ |
| 1 | 1 | test1 |
| 2 | 1 | test2 |
再來看模型
class User extends Model
{
protected $connection = 'a';
public function Topic()
{
$this->hasMany(Topic::class);
}
}
class Topic extends Model
{
protected $connection = 'b';
}
儘管 User::with('Topic')->get(); 這肯定是沒問題的,因為這會分為兩次查詢,會切換資料庫
User::withCount('Topic')->get(); //這樣就不行了
它會產生這樣的sql語句。
select *,(select count(*) from topics where user_id = users.id ) as topic_count from users。
因為topics 在b 資料庫中所以會報 table view not found
解決方案如下:
class Topic extends Model
{
protected $connection = 'b';
protected $table = 'b.topics'; //這裡的b 必須是你的資料庫名
}
User::withCount('Topic')->get();
它會產生這樣的sql語句。
select *,(select count(*) from `b`.`topics` where `b`.`topics`.`user_id` = `users.id` ) as topic_count from `users`;
不知道各位小夥伴還有沒有更好的解決方案
本作品採用《CC 協議》,轉載必須註明作者和本文連結