使用一个项目的数据库的现有表到Laravel中的另一个项目

时间:2019-04-20 13:59:03

标签: php mysql laravel

我在Laravel中创建了一个单独的集成目录/项目(我们将其称为project-Interface),并创建了新的数据库(我们将其称为DB-A)和3个新表(table-a,{{1 }},table-b)和table-c命令以及与此模型相关的模型。

现在Laravel中有一个不同的项目(我们称其为project-Web),并且它拥有自己的数据库(我们将其称为DB-B)并创建了自己的表和模型(artisan migratetable-xtable-y)。

我需要执行以下操作:

  1. 我可以使用project-Interface中的table-z的DB-B来保存一些 里面有细节吗?
  2. 我可以通过DB-B中的migration命令从project-interface创建表table-xtable-atable-b吗?
  3. 我可以在table-c中的project-Interface中添加更多列并使用它吗?

我可以使用Project-Web的table-x文件中的DB-B的现有DB连接并将其用于Project-Interface的env文件中吗?

如果是,如果我是通过project-Interface创建的,它将在project-Web的DB-B中创建一个新表吗?这些变化还会反映在那里吗?另外,如果我从project-Interface在env中创建了新列,那么该列会反映在project-Web中吗?

所以这里的目的是DB应该是相同的并且应该是通用的,其中应该包含其中的所有表,并且无论我从project-Interface还是project-Web进行的任何更改,它都应该使用DB-B

1 个答案:

答案 0 :(得分:0)

一些答案​​:

  1. 似乎您在询问是否可以在项目A中写入数据库B。简短的回答是,如果可以连接到数据库B,则可以对其进行写入。数据库不知道您是从另一个Laravel项目还是另一个仓库中的项目进行连接-它仅了解数据库用户。

  2. 您还可以运行属于另一个项目的迁移,但是根据到目前为止的信息,我建议您不要这样做。我将在下面解释更多。

  3. 将列添加到不同的数据库听起来像是对问题2的重述,而我的回答将是相同的。

混合迁移存在的问题是第二个项目(project-Web)无法创建其所有表。这将增加以下方面的复杂性:

  • 创建新的开发环境(例如,在向项目中添加新的团队成员时)
  • 创建自动数据库测试,每次运行都需要拆除并重新创建数据库
  • 创建新的登台/生产环境

鉴于您想在两个项目之间进行一些通信,我想知道HTTP API是否正确?这将易于管理:

  • 所有表都存储在一个项目中,所有逻辑也存储在这里。这将极大地简化迁移(并因此简化了我前面提到的所有环境的创建)。
  • 您可以在一个项目中提供Web服务,以便为另一个项目提供读/写服务。从自动化的角度来看,这更容易测试:在API项目中,您可以运行API / HTTP测试;在客户端项目中,您可以使用模拟。
  • 这种方法将允许您以干净的方式隔离地测试项目,然后根据需要进行自动集成测试(例如,通过使用CI / CD将两个项目部署到测试服务器,运行迁移和任何种子文件) ,然后在导致两个项目以设计方式协同工作的项目上运行测试。