【问题标题】:How to connect to remote database from Laravel Homestead?如何从 Laravel Homestead 连接到远程数据库?
【发布时间】:2018-11-09 00:20:36
【问题描述】:

我目前正在使用 Windows 10 上的 Homestead 开发 Laravel 5.5 项目。 情况是:我的应用程序需要从位于我的物理机上的外部数据库中读取数据(只读,不可写入)。因为在生产环境中,这个应用程序有自己的数据库,还需要从远程数据库中获取数据。这个外部数据库使用 XAMPP 托管在 localhost 上。

我已经搜索了 Internet,但没有任何适用于我的场景的答案。我现在完全糊涂了。我是一名编程新手,所以任何人都可以给我一些关于我应该如何配置以实现这一点的提示吗?非常感谢!


[更新] 关于我正在开发的这个应用程序: 这是一个网络应用程序,允许图书馆员和学术支持人员记录每项服务的详细信息,例如哪个学生来询问如何进行参考等。

它只会在我的学校内运行,有点像内部应用程序?无论如何,任何人都无法在校外访问它,并且仅供教职员工使用,而不是供学生使用。 这个应用程序有自己的本地数据库来存储员工帐户和服务详细信息,而且正如我上面提到的,它需要从学校数据库中获取学生信息,目前在开发过程中,我在物理机上设置了一个数据库作为学校数据库,并在其中转储一些虚拟数据。

然后我使用命令行创建了一个名为 Student 的新模型。当我尝试使用 php tinker 从外部数据库读取数据时,它显示如下错误:

>>> App\Modles\Student::all()
PHP Fatal error:  Class 'App/Modles/Student' not found in Psy Shell code on line 1

下面我包含了我的 Student.php、.env 和 database.php 文件

App/Models/Student.php

 <?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    protected $connection = 'mysql_campus';
}

.env:

    ......
    //Local Database
    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1

    DB_DATABASE=w2_support
    DB_USERNAME=homestead
    DB_PASSWORD=secret

    //External Database
    DB_CONNECTION=mysql_campus
    DB_EXT_HOST=10.0.2.2

    DB_EXT_DATABASE=campus
    DB_EXT_USERNAME=root
    DB_EXT_PASSWORD=

    BROADCAST_DRIVER=log
    CACHE_DRIVER=file
    SESSION_DRIVER=file
    QUEUE_DRIVER=sync
    ......

数据库.php:

    ......
    'connections' => [

    'sqlite' => [
        'driver' => 'sqlite',
        'database' => env('DB_DATABASE', database_path('database.sqlite')),
        'prefix' => '',
    ],

    //Local Database
    'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],

    //External Database
    'mysql_campus' => [
        'driver' => 'mysql',
        'host' => env('DB_EXT_HOST', '10.0.2.2'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_EXT_DATABASE', 'forge'),
        'username' => env('DB_EXT_USERNAME', 'forge'),
        'password' => env('DB_EXT_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],
    ......

【问题讨论】:

  • 你能显示你的 .env 文件里有什么吗
  • 欢迎来到 SO。跟编程有关系吗?你能出示你的代码吗?
  • 代码更新以及一些附加信息

标签: php mysql laravel laravel-5.5 homestead


【解决方案1】:

您应该能够从您的家园连接到 10.0.2.2 以访问主机。这是主机的标准环回地址。这有点像您如何连接到 127.0.0.1 或 localhost 以获取本地数据库。

【讨论】:

  • 非常感谢!现在我坚持如何实际连接外部数据库。我已经更新了有关我正在处理的这个项目的一些信息以及代码,你介意看一下吗?
  • 您可以尝试以下操作:stackoverflow.com/questions/31847054/… ... 只需为第二个连接输入不同的连接详细信息。
  • 谢谢!您的回复帮助我连接到在我的主机上运行的 Meil​​isearch 服务。上帝保佑你好人
【解决方案2】:

我的 laravel 版本是 5.1。

您可以编辑 .env 文件并将 DB_HOST 值替换为远程数据库主机。

另一种方法是编辑 config/database.php 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2017-11-21
    • 2014-07-28
    • 1970-01-01
    • 2018-11-06
    • 2018-09-03
    • 1970-01-01
    相关资源
    最近更新 更多