【问题标题】:Laravel Guzzle Request gets wrong DB ConnectionLaravel Guzzle 请求获取错误的数据库连接
【发布时间】:2017-06-19 15:46:55
【问题描述】:

我正在尝试从一个 Laravel 项目向另一个项目发出请求。我得到的问题是第二个 Laravel 正在使用第一个 Laravel 数据库连接。所以它在抱怨一个表不存在。

这是我正在使用的代码。

$data = ['test' => 'foobar'];
$client = new \GuzzleHttp\Client();
$url = getenv('API_BASE') . 'stock-list';

$res = $client->request('POST', $url, [
    'headers' => [
        'X-Public' => getenv('API_PUBLIC'),
        'X-Hash' => ApiService::Encrypt(getenv('API_PRIVATE'), json_encode($data)),
    ],
    'json' => $data,
    'http_errors' => false,
]);

echo "<pre>" . print_r($res->getBody()->getContents(), true) . "</pre>";

有没有人遇到过这样的事情?

【问题讨论】:

  • 值得一提的是,getContents 只会返回流的剩余部分,如果你想安全地返回整个主体,你应该将它转换为字符串。

标签: php laravel laravel-5 guzzle


【解决方案1】:

您可以像这样更改默认的数据库连接运行时:

假设你有

  • 1 个安全数据库,其凭据是默认数据库设计时间。
  • 1 个或多个数据库包含 1 个或多个用户的数据。

您使用安全数据库登录并根据用户将默认数据库更改为数据数据库。

    config(['database.connections.data' => array(
                'driver'    => 'sqlsrv',
                'host' => $connection['Database_Server'],
                'database' => $connection['Database_Name'],
                'username' => $connection['Database_User'],
                'password' => $connection['Database_Password']

            )]);

            DB::setDefaultConnection('data');

如果您不需要这种灵活性,您可以定义每个模型的连接:

class A extends Model {
    protected $connection = 'security';
    protected $table = 'A';
}

【讨论】:

  • 我遇到的问题是 .env 变量在调用另一个 Laravel 项目时被覆盖。
  • 好的,你的问题现在解决了吗?否则不使用 .env 进行连接,而是使用模型!
【解决方案2】:

当我在同一台服务器上运行两个 Laravel 项目时,解决此问题的方法是更改​​ .env 文件中的环境变量名称。

DB_DATABASE=XXXX

变成

XXX_DB_DATABASE=XXXX

这需要在其中一个 Laravel 设置上完成,然后才能正常工作。

【讨论】:

  • 很好的解决方案。似乎一旦 PHP 设置了环境 DB_DATABASE 变量,它就不能被第二个应用程序更改。
猜你喜欢
  • 2023-03-04
  • 2017-04-10
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
  • 2018-12-22
  • 2018-08-13
相关资源
最近更新 更多