两个项目可以使用相同的数据库吗?

时间:2015-06-09 23:50:17

标签: laravel web-applications laravel-5 frontend backend

问题可能听起来含糊不清,但事实上,这是我一直想知道的事情,我不知道该怎么做。

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

当试图找出控制器如何与模型交互时,以及如何处理迁移时,会出现inquiere?我是否必须为前端和后端的每个表创建一个模型?

目标是为两个项目使用相同的数据库,而不会出现迁移和模型问题。

编辑1 我的意思是Frontend App是一个显示数据的网站,人们可以在那里进行互动,在那里他们会看到一些东西。后端应用程序是管理员将编辑前端内容的地方,在那里他们可以CRUD到数据库;在前端应用程序中,我只想从数据库中选择数据。

2 个答案:

答案 0 :(得分:2)

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

魔法来自围绕PSR4命名空间的作曲家中的一些非常简单的线条。

如果您事先知道要为两个项目创建要共享的模型,则只需创建一个单独的文件夹,并将所有这些模型放入命名空间“Share”或其中。然后以与下面相同的方式通过composer的自动加载将它们拉到两个应用程序中。

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

  • 创建新的Laravel项目
  • 在新项目上设置新命名空间,使其与“App”

    不同

    php artisan app:name NewName

  • 请务必先执行此步骤!如果您打开文件或进行更改,则自动重命名空间不起作用。

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

"autoload": { "classmap": [ "database" ], "psr-4": { "NewName\\\": "app/", "App\\\": "../original-project-folder/app/" } },   - 由于迁移可能依赖于本地类模型,因此您需要在新项目文件夹中保留新项目的迁移。您可以在原始迁移后运行它们,它可以正常工作。

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

让我永远想出这个 - 它不容易搜索。希望这有助于某人。

答案 1 :(得分:1)

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

文件夹结构
Folder Structure

对于我的后端控制器,我已将它们放在api/v1文件夹中。对于api/v1文件夹中的每个控制器,请使用此类名称空间Api\V1

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

  use App\MyModel;

现在使用路由器呼叫所有后端api,使用路由组。例如:

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

});

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