Laravel 中的环境驱动型数据库设置?

2022-08-30 11:11:39

我正在移动Laravel框架,但我在数据库设置方面遇到了问题,

具体来说,我已经设置了我的环境,它们对于应用程序.php配置文件工作正常,但是数据库.php配置文件似乎没有效果。

即使我的环境文件夹中有一个数据库.php配置文件,它也永远不会加载,我将一堆无效字符(键盘混搭)放入文件中以使php抛出错误,但它从未被击中。

Laravel 是否不支持基于环境的数据库设置?还是我做错了?


答案 1

您绝对可以按环境设置数据库设置(以及任何其他配置设置)。

对于Laravel 3(对于Laravel 4和Laravel 5,见下文):

首先 - 您需要在中定义并将其设置为如下所示:$environmentspaths.php

$environments = array(
  'development' => array('*.dev'),
  'production' => array('*.com'),
);

Laravel 将自动查找此变量,如果已设置,将使用关联的配置。

通常你有一个文件夹,其设置如和configdatabase.phpauth.php

现在,只需为您计划使用的每个文件夹(例如“开发”)创建一个新文件夹即可。你最终会得到一个这样的文件夹结构;Laravel_Env

/application
  /config
    /development
      database.php
    /production
      database.php
    application.php
    config.php
    database.php
    ...
    user_agents.php

您会注意到我只包含在每个子文件夹中。Laravel 将始终首先加载默认配置设置,然后使用环境设置中的任何自定义配置覆盖它们。database.php

最后,在你的开发/数据库文件中,你会有这样的东西;

<?php
 return array(
'default' => 'mysql'
 );

p.s. 我刚刚在 Laravel 的当前 3.2.12 版本中对此进行了测试 - 它绝对有效。

额外提示:您还可以为 Artisan 自动设置环境,这样就不必在每个命令行上手动包含环境!为此,请执行以下操作:

  1. 您需要知道您正在运行Artisan的“主机名”。要找出答案 - 暂时编辑根文件夹中的,并添加到第2行(即高于所有内容)。artisan.phpvar_dump(gethostname());

  2. 从命令行运行。您将获得一个带有主机名的字符串转储。在我的情况下,它的“TSE-Win7”;php artisan

  3. 删除对文件的更改artisan.php

  4. 将您的主机名(即“TSE-Win7”)添加到环境中。

你最终应该得到这样的东西:

$environments = array(
  'development' => array('*.dev', 'TSE-Win7'),
  'production' => array('*.com'),
);

Artisan 现在将使用您的开发环境运行。如果您部署到实时服务器 - 重新运行这些步骤以获取服务器的 hostname(),您可以仅为服务器配置特定的 artisan 配置!

对于Laravel 4:

默认环境始终为 。但是在开始时.php文件中,您可以定义其他环境。production

 $env = $app->detectEnvironment(array(
   'local' => array('your-machine-name'),
));

在Linux和Mac上,您可以在终端中按类型确定 - 它将输出计算机的名称。在Windows上,放在文件的开头 - 并运行网站一次 - 它将显示计算机的当前主机名。hostnamehostnamedd(gethostname());routes.php

要将当前环境作为应用程序中的变量获取 - 请在此处阅读此 SO 答案。Laravel 4:如何获得环境价值?

对于Laravel 5:

有一个配置文件,在根目录中调用。观看此 laracast,配置已完全解释。.env


答案 2

如果您使用的是 artisan ( laravel 的命令行 )您需要添加的每个命令

artisan bla bla bla --env=Development 

artisan bla bla bla --env=Production

推荐