如何从Laravel Homestead连接到远程数据库?

时间:2018-11-09 00:20:37

标签: php mysql laravel laravel-5.5 homestead

我目前正在使用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
    ......

database.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,
    ],
    ......

2 个答案:

答案 0 :(得分:1)

您应该可以从家中连接到10.0.2.2来访问主机。这是主机的标准回送地址。有点像您如何连接到127.0.0.1或本地数据库的localhost。

答案 1 :(得分:0)

我的laravel版本是5.1。

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

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