Laravel 两个项目可以使用同一个数据库吗?

Laravel 两个项目可以使用同一个数据库吗?,laravel,web-applications,laravel-5,frontend,backend,Laravel,Web Applications,Laravel 5,Frontend,Backend,这个问题听起来可能很模糊,但事实上,这是我想了一段时间的事情,我不知道该怎么做 我已经和Laravel 5合作了一段时间,但是我使用Laravel开发的大多数项目都在同一个项目中使用前端应用程序和后端应用程序。这次的要求是创建两个独立的项目,一个用于前端,另一个用于后端 当试图弄清楚控制器将如何与模型交互,以及如何处理迁移时,就会出现查询?我需要为前端和后端的每个表制作一个模型吗 目标是为两个项目使用相同的数据库,而不存在迁移和模型方面的问题 编辑1 我所说的前端应用程序是指一个网站,在那里数据

这个问题听起来可能很模糊,但事实上,这是我想了一段时间的事情,我不知道该怎么做

我已经和Laravel 5合作了一段时间,但是我使用Laravel开发的大多数项目都在同一个项目中使用前端应用程序和后端应用程序。这次的要求是创建两个独立的项目,一个用于前端,另一个用于后端

当试图弄清楚控制器将如何与模型交互,以及如何处理迁移时,就会出现查询?我需要为前端和后端的每个表制作一个模型吗

目标是为两个项目使用相同的数据库,而不存在迁移和模型方面的问题

编辑1
我所说的前端应用程序是指一个网站,在那里数据将被显示,人们将在那里进行互动,他们将在那里看到一些东西。后端应用程序是一个管理员将编辑前端内容的应用程序,在那里他们将能够CRUD到数据库;在前端应用程序中,我只想从数据库中选择数据。

您的问题假设是,您的后端将插入、更新、删除或对您的数据库执行任何其他查询,您的前端将负责控制表单、页面和显示数据。有了这个模型,如果您想使用相同的模型和迁移,实际上不需要为后端和前端创建单独的项目。我已经在相同的项目中使用分离的路由成功地分离了后端(api/v1)和前端。我将在下面描述它

文件夹结构

对于我的后端控制器,我将它们放在
api/v1
文件夹中。对于
api/v1
文件夹中的每个控制器,像这样使用命名空间
api\v1

<?php namespace App\Http\Controllers\Api\V1;

  use App\MyModel;

现在从项目中的任何位置调用后端api控制器。你的api可以在你的项目中使用任何模型,显然你的其他主控制器将作为你的前端控制器工作,你可以做所有常规的事情。

我也有同样的问题,我想我会为将来任何想做同样事情的人回答。在许多情况下,您可能需要从同一数据库中提取两个单独的应用程序。在我的例子中,它是一个输入各种数据集的后端,以及一个面向前端/客户端的站点,客户端从特定区域提取信息。两者都是巨大的应用程序,将它们分开是一个好处

这种魔力来自于composer中围绕PSR4名称空间的几句非常简单的话

如果您在创建两个项目之前就知道要共享哪些模型,那么只需创建一个单独的文件夹,并将所有这些模型放在名称空间“share”或类似的地方。然后通过composer的自动加载将它们下拉到两个应用程序中,方法如下所示

如果像我一样,您已经完成了一个项目(并且现在不想更改原始项目中的名称空间),并且现在想添加另一个使用许多相同模型的项目,我会这样做:

  • 创建新的Laravel项目
  • 将新项目上的新命名空间设置为与“App”不同的名称

    php artisan应用程序:name NewName

  • 确保首先执行此步骤!如果打开文件或进行更改,自动重新命名空间将不起作用

  • Composer.json
    中添加说明,以通过名称空间“App”查找所有旧型号(以及其他任何型号),并在NewName下查找当前应用程序的所有型号(注意,您可以在根安装文件夹上方):

“自动加载”:{
“类映射”:[
“数据库”
],
“psr-4”:{
“NewName\\”:“app/”,
“App\\\”:“./原始项目文件夹/App/”
}
},
-因为迁移可能依赖于本地类模型,所以需要将新项目的迁移保留在新项目文件夹中。您可以在原始迁移之后运行这些,并且工作正常

  • 如果像我一样,你对app#2有一组不同的用户,并且想要更改用户模型(以便不使用原始的app User类),这需要做更多的工作,主要是围绕授权。对app/config/auth.php进行更改,以确保新用户类具有正确的类名

我花了很长时间才弄明白这一点——它不容易搜索。希望这对其他人有所帮助。

Hmm,实际上我需要的是将站点管理应用程序和应用程序分开,例如,如果项目对我来说是一个博客,那么将有两个应用程序,一个用于显示帖子,另一个用于我对帖子进行CRUD…@JonthanSolorzano我相信实际上你可以通过路由实现它。只需创建一个带有
前缀的路由组
admin并添加
auth
中间件,以便访问管理路由,您需要登录并设置路由,如
example.com/admin/post/create
example.com/admin/post/edit/{id}
example.com/admin/dashboard
等。您的前端url将类似于
example.com/blog/post/{slug}
等。我希望它对您有意义。是的,我可以,我已经为其他项目这样做了,但这次的要求是这样的,他们说“安全原因”此外,他们不想有相同的域为管理网站虽然我没有测试它,但我认为与一个不同的域也我以前的评论是有效的。在路由组中,您只需指定两个域的域名,在virtualhost中,您需要指向同一个文档的根。是的,这是一种方法,我已经提出了。但问题是,我不确定这些事情,他们希望项目在单独的文件夹中供管理员使用,事实上,在前端工作的人可以有自己的路线,没有必要将其划分为两个单独的项目。有一个类似的情况,最终导致包失败
Route::group(
    [
        'namespace' => 'Api\V1',
        'prefix' => 'api/v1'
    ], function(){

        Route::get('counties', ['uses'=>'CountiesApiController@index']);
        Route::get('counties/{id}', ['uses'=>'CountiesApiController@show']);

        //... your all other routes here

});