Laravel 中两个不同数据库之间的匹配 ID

Posted

技术标签:

【中文标题】Laravel 中两个不同数据库之间的匹配 ID【英文标题】:Match ID between two different databases in Laravel 【发布时间】:2020-03-30 21:15:51 【问题描述】:

我想试试如何在 Laravel 中匹配两个不同的数据库。

我使用的是 5.7 版本的 Laravel。

为了简化我的数据库,假设一个表在 DB1 中称为 Employee,而另一个表在 DB2 中称为 Worker。

两个表中的主键是应该匹配的 ID。

如果 Laravel 不允许这样做,我也愿意知道如何在 mysql 中进行匹配。

【问题讨论】:

我有点困惑——Laravel 是一个 php 框架。这不是 MySQL 的问题吗? @Nelles 如果我可以在 Laravel 中处理它,我想知道该怎么做。如果不能,我也有可能在mysql中尝试一下 【参考方案1】:

引用自这个答案here

您需要管理跨数据库的引用约束 使用触发器。 ***************** 基本上你创建一个插入、更新触发器来验证主键表中的键是否存在。如果钥匙 不存在然后恢复插入或更新,然后处理 例外。

例子:

Create Trigger dbo.MyTableTrigger ON dbo.MyTable, After Insert, Update
As
Begin

   If NOT Exists(select PK from OtherDB.dbo.TableName where PK in (Select FK from inserted) BEGIN
      -- Handle the Referential Error Here
   END

END

已编辑:只是为了澄清。这不是执行参照完整性的最佳方法。理想情况下你会想要两张桌子 在同一个数据库中,但如果那是不可能的。那么上面是一个 为您解决的潜在问题。


正如引用的答案中提到的,最好的方法是将表放在同一个数据库中。 如果你能做到这一点,那么只需在它们之间添加一个foreign key

FOREIGN KEY constraint 是用于将两个表链接在一起的键。

FOREIGN KEY 是一个表中的一个字段(或字段集合),它引用另一个表中的 PRIMARY KEY

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);

因此,在此示例中,column 名为 PersonID 位于 table 名为 Orders 将通过 foreign key 链接到名为 PersonIDcolumn 位于 table 名为 Persons。 /p>

阅读更多here 或here

【讨论】:

以上是关于Laravel 中两个不同数据库之间的匹配 ID的主要内容,如果未能解决你的问题,请参考以下文章

在Laravel中获取具有不同外国ID的列中的最大值

是否可以在 Laravel 8 中按 from 和 to user id 分组

将两个数组合并为一个 Laravel PHP [重复]

查找两个不同数据框列之间的部分匹配,并在找到匹配时分配值

匹配 Mongoose 中的两个不同字段,聚合?

计算两个 _m128i SIMD 向量之间的匹配字节数