laravel:属于两个不同的mysql连接的BelongsToMany

时间:2018-08-08 13:02:58

标签: php laravel laravel-5 eloquent

我有2个不同的mysql连接

1-mysql数据库

类别表 2-文章数据库

文章表 Articles_categories表 我尝试使用不同的mysql conacction与两个表建立关系

但是我得到一个错误:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'articles.categories' doesn't exist (SQL: select `categories`.*, `articles_categories`.`article_id` as `pivot_article_id`, `articles_categories`.`category_id` as `pivot_category_id` from `categories` inner join `articles_categories` on `categories`.`id` = `articles_categories`.`category_id` where `articles_categories`.`article_id` = 7)
categories db is inside mysql table and article and articles_categories is inside the articles db connaction

这是我的代码:

  public function categories(){

return $this->belongsToMany('App\Models\Category','articles_categories','article_id','category_id');

我认为Laravel试图在Articles数据库中找到Categories表,但是category表位于mysql数据库中

谢谢

1 个答案:

答案 0 :(得分:0)

首先,您需要明确指定其他模型的连接:

class Category extends Model {
     protected $connection = 'mysql';
}

然后最好对数据透视表的名称非常明确:

public function categories(){
     $defaultConnection = config("database.default");
     $defaultDatabase = config("database.connections.$defaultConnection.database");
     return $this- belongsToMany('App\Models\Category',"$defaultDatabase.articles_categories",'article_id','category_id');
}

这将尝试确保该关系在默认连接中使用articles_categories表,而不在Category中指定的连接中使用该表。