如何从 Laravel Homestead 连接到远程数据库?
How to connect to remote database from Laravel Homestead?
我目前正在 Windows 10 上使用 Homestead 进行 Laravel 5.5 项目。
情况是:我的应用程序需要从位于我的物理机器上的外部数据库读取数据(只读,不可写)。因为在生产环境中,这个应用有自己的数据库,还需要从远程数据库中取数据。此外部数据库使用 XAMPP.
托管在本地主机上
我在 Internet 上进行了搜索,但没有找到适用于我的情况的答案。我现在完全糊涂了。我是一名刚接触编程的学生,所以任何人都可以给我一些关于我应该如何配置才能实现这一目标的提示吗?非常感谢!
[更新]
关于我正在开发的这个应用程序:
它是一个网络应用程序,允许图书馆员和学术支持人员记录每项服务的详细信息,例如哪个学生进来询问如何进行参考等。
它只会在我的学校 运行 内使用,有点像内部应用程序?反正校外是没有人可以访问的,而且只供教职工使用,不供学生使用。
这个app有自己的本地数据库来存储员工账号和服务详情,而且我上面提到,它需要从学校数据库中获取学生信息,目前在开发过程中,我在我的物理机上建立了一个数据库作为学校数据库,并在其中转储一些虚拟数据。
然后我使用命令行创建了一个名为 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,
],
......
您应该可以从您的宅基地连接到 10.0.2.2 以访问主机。这是主机的标准环回地址。这有点像您如何连接到 127.0.0.1 或本地数据库的本地主机。
我的 laravel 版本是 5.1。
您可以编辑 .env 文件并将 DB_HOST 值替换为远程数据库主机。
另一种方法是编辑config/database.php文件。
我目前正在 Windows 10 上使用 Homestead 进行 Laravel 5.5 项目。 情况是:我的应用程序需要从位于我的物理机器上的外部数据库读取数据(只读,不可写)。因为在生产环境中,这个应用有自己的数据库,还需要从远程数据库中取数据。此外部数据库使用 XAMPP.
托管在本地主机上我在 Internet 上进行了搜索,但没有找到适用于我的情况的答案。我现在完全糊涂了。我是一名刚接触编程的学生,所以任何人都可以给我一些关于我应该如何配置才能实现这一目标的提示吗?非常感谢!
[更新] 关于我正在开发的这个应用程序: 它是一个网络应用程序,允许图书馆员和学术支持人员记录每项服务的详细信息,例如哪个学生进来询问如何进行参考等。
它只会在我的学校 运行 内使用,有点像内部应用程序?反正校外是没有人可以访问的,而且只供教职工使用,不供学生使用。 这个app有自己的本地数据库来存储员工账号和服务详情,而且我上面提到,它需要从学校数据库中获取学生信息,目前在开发过程中,我在我的物理机上建立了一个数据库作为学校数据库,并在其中转储一些虚拟数据。
然后我使用命令行创建了一个名为 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,
],
......
您应该可以从您的宅基地连接到 10.0.2.2 以访问主机。这是主机的标准环回地址。这有点像您如何连接到 127.0.0.1 或本地数据库的本地主机。
我的 laravel 版本是 5.1。
您可以编辑 .env 文件并将 DB_HOST 值替换为远程数据库主机。
另一种方法是编辑config/database.php文件。