如果表位于不同的数据库中,是否可以在Eloquent模型中定义关系?

时间:2019-10-24 09:28:46

标签: php database laravel eloquent

有两个表,它们位于不同的数据库中。假设其中一个是“用户”,另一个是“汽车”。汽车中有“ user_id”列。是否可以为这两个表(Car和User)创建模型,以便在查询Users时渴望加载关系? 像这样:

User::find(3)->with('cars')->get();

3 个答案:

答案 0 :(得分:0)

这不可能。您可以通过设置不同的连接来执行此操作,但这不符合关系数据库策略。

答案 1 :(得分:0)

您可以对支持此功能的数据库(例如Microsoft SQL Server作为驱动程序)执行此操作。完成此工作所需要做的就是在配置中添加多个连接(数据库)并在模型中引用它们:

protected $connection = 'database2';

答案 2 :(得分:0)

实际上我尝试了一下,结果证明laravel在这种情况下效果很好。您所需要做的就是在模型上指定连接,并像通常一样定义关系。关键是当您使用Model :: with('relation')时,laravel不会创建一个大查询。首先,它查询根模型,然后查询子模型,然后在代码中对其进行匹配。尽管我发现这很奇怪,因为它必须降低性能,因为我们有两个查询而不是一个查询,然后它处理结果,尽管它与跨数据库关系很好。