是否可以在没有默认数据库的情况下使用 Laravel 4

Posted

技术标签:

【中文标题】是否可以在没有默认数据库的情况下使用 Laravel 4【英文标题】:Is It Possible to use Laravel 4 without a Default Database 【发布时间】:2015-07-01 22:23:16 【问题描述】:

我正在创建一个从多个不同数据库读取信息的应用程序,但实际上并没有自己的数据库,因为没有任何信息被写入任何地方。

基本上,用户选择记录和类型,应用程序将根据他们的选择生成.pdf 文件。我在app/config/database.php 中定义了多个连接,但默认情况下我不想连接到其中任何一个。有没有办法告诉 Laravel not 连接到数据库?我尝试了一些东西(都在app/config/database.php),首先是:

'default' => NULL,
// and 
//'default' => '',

两者都返回:

未定义索引:驱动程序

我也试过了:

'default' => 'none',

'connections' => array(
    'none' => array(
        'driver' => '',
        'host' => '',
        ...
     ),
 ),

反过来又返回:

不支持的驱动程序 []

不支持的主机[]

...

最后设置'default' => '',返回:

数据库 [] 未配置。

我已经找到了在没有数据库连接的情况下使用 Laravel 模型的方法,但实际上并不是 Laravel 本身。

编辑

将连接设置为现有的 mysql 连接而不选择数据库“有效”:

'default' => array(
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => '',
    'username'  => '****',
    'password'  => '****',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
),

但我不确定这是否是正确的方法。这感觉像是一种变通方法,而不是实际的解决方案。

【问题讨论】:

创建自己的驱动程序,什么都不做? 只要你不使用它就什么都做不了,所以别管它。 【参考方案1】:

我会做以下事情:

'driver' => 'sqlite',

对于sqlite 连接设置

'sqlite' => [
    'driver' => 'sqlite',
    'database' => ':memory:',
    'prefix' => '',
]

这样,它将使用in-memory database,并且当数据库连接关闭时数据库将不复存在,并且由于您不会打开连接,因此您永远不会打开本地数据库。

您还可以从 app.php 配置文件中删除数据库服务提供者:

    'Illuminate\Cookie\CookieServiceProvider',
    //'Illuminate\Database\DatabaseServiceProvider',
    'Illuminate\Encryption\EncryptionServiceProvider',

Fluent 和 Eloquent 的外观在同一个文件中:

    'Crypt'     => 'Illuminate\Support\Facades\Crypt',
    //'DB'        => 'Illuminate\Support\Facades\DB',
    //'Eloquent'  => 'Illuminate\Database\Eloquent\Model',
    'Event'     => 'Illuminate\Support\Facades\Event',

这将阻止您连接到本地数据库,甚至无法启动您刚刚设置的sqlite 数据库连接。

【讨论】:

返回错误,就像我在最后一个问题中所说的建议 sqlite 作为我的驱动程序:"PDOException: could not find driver"(答案已被海报删除,但与您的基本相同)。另外,我仍在使用DBEloquent 外观,因为我仍在从数据库中提取信息,所以你问题的后半部分似乎是个坏主意。 是的,第二部分更适合人们重新审视这个问题并想要一个没有数据库的应用程序。只是出于兴趣,您使用什么环境来运行代码?我一直在内存数据库中使用 sqlite 进行测试,从未遇到过找不到驱动程序的问题。 是的,这是有道理的,但它不适用于我正在尝试做的事情:P 另外,在 Linux Ubuntu 14.04 上使用 Apache/MySql/PHP 5.4(我认为) 我刚刚尝试了这个解决方案,但发现你可以在数据库配置中设置 ** 'default' => false ** ,然后注释掉你提到的行(服务提供商和立面),它会工作。【参考方案2】:

只需在数据库配置中将您的数据库驱动程序定义为“sqlite”。

'default' => 'sqlite',

只要您没有更改默认 sqlite 配置部分中的任何内容,一切都应该有效。您不一定非要使用数据库,但它会减轻您收到的这些错误。

如果您出于某种原因更改了默认的 sqlite 配置,您可以按照以下步骤配置 sqlite db。

'sqlite' => array(
    'driver'   => 'sqlite',
    'database' => __DIR__.'/../database/production.sqlite',
    'prefix'   => '',
),

此外,如果“production.sqlite”文件不存在,请确保它存在。您可以从命令行轻松完成此操作:

touch app/database/production.sqlite

【讨论】:

返回:"PDOException: could not find driver"。请参阅 Andrew Willis 的回答。【参考方案3】:

您需要在 app/config/database.php 文件中定义连接,并在使用 laravel 的 DB::connection('connection_name') 运行查询时指定连接。 更多信息在这里 --> http://laravel.com/docs/4.2/database#accessing-connections

【讨论】:

我已经用上述所有方法做到了。它唯一起作用的是最终的无数据库示例。其他三个仍然导致相同的错误。访问我的 Route::get("/") 调用 DB::connection("example")...(这不是默认数据库)仍然失败。

以上是关于是否可以在没有默认数据库的情况下使用 Laravel 4的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有默认行填充颜色的情况下构建Bokeh数据表?

使用Larave5.6l提交POST请求出现The page has expired due to inactivity错误

是否可以在没有管理员权限的情况下安装.appxbundle(UWP / XAML应用程序)?

如何在没有参数的情况下快速将类保存到用户默认值

是否可以在没有 Windows 商店且没有旁加载的情况下安装经过微软认证的 appx?

手把手教你跑Larave框架实战笔记系列之二