在使用不同连接时,()需要来自雄辩的地方

时间:2018-02-15 22:20:41

标签: laravel eloquent laravel-5.5 laravel-eloquent

我有两个模型 - 用户和公告,它们分别存在于两个不同的连接 - mysqlintranet。用户模型hasMany公告和公告belongsTo单个用户。

在公告模型中,我有protected $connection = 'intranet',在用户模型中我有protected $connection = 'mysql'。最初我没有在User模型上指定$connection属性,因为它是应用程序的默认属性,但是将其添加进行测试。

执行任何类型的查询都能正常工作。作为一个例子,这些工作:

  • User::find(1)->announcements()->where('name', 'something')->get()
  • Announcement::find(2)->user

但是,在Announcements模型上使用whereHas时,我收到以下SQL错误:Base table or view not found: 1146 Table 'intranet.associate' - associate是用户的表,而intranet是公告模型中指定的数据库连接。

虽然我确实找到了问题here的答案。不过,我很好奇,为什么你需要使用->from(..)。这是预期的功能吗?我在文档中找不到有关使用from()的内容。

作为旁注,我能够解决这个问题"问题"通过在用户模型中的$table方法中分配__construct属性:

__construct(array $attributes = []) {
    $this->table = env('DB_DATABASE').'.associate';
}

env('DB_DATABASE')是默认连接的数据库。

0 个答案:

没有答案