如何让 laravel DB 连接到 php 连接?
Posted
技术标签:
【中文标题】如何让 laravel DB 连接到 php 连接?【英文标题】:How to get laravel DB connection to php connection? 【发布时间】:2017-08-18 19:20:44 【问题描述】:我需要接收到变量的 laravel DB 连接,以对数据库提出具体的纯 SQL php 需求。所需代码:
<?php
// this is not working
$conn = DB::connection();
// Check connection
if ($conn->connect_error)
die("Connection failed: " . $conn->connect_error);
echo "Connected successfully";
?>
期望的结果:“连接成功”
我需要它,因为我有非常复杂的 SQL 需求,我需要放入一个查询,而不是使用 laravel 查询语法(我相信这是更好的方法,但我有复杂的查询,需要使用纯查询文本来执行,不是 laravel "->" 语法)
我需要让 laravel 数据库连接不总是像 PDO 那样经常建立第二个 php 连接或写下数据库凭据。如果存在从 laravel 到 DBS 的 PDO 连接,那么获取到 php 对我来说也很有用。
DB::connection()->name
返回一个 DB 的名称,但那是没有连接的:/
我一直在寻找它,但没有找到解决方案,有人可以帮我找到正确的答案吗? (也许不重要,但我用的是mysql)
【问题讨论】:
你可以使用\DB::statement('raw query here');
。
但是如何从这个语句中获取一个结果(或结果集)呢?或者甚至可以按照我的要求获得这种连接?但是感谢您的贡献,我会仔细研究该语句语法..我发现了另一个好东西,但我的问题没有答案: $results = DB::select( DB::raw("SELECT * FROM some_table WHERE some_col = '$someVariable'") );
您是否尝试阅读文档:laravel.com/docs/5.4/database#running-queries?
不知道这是否有用:DB::connection()->getPdo()
您将无法以这种方式检测连接错误,因为只有连接成功时才会使用暴露 PDO 实例的外观。
【参考方案1】:
您可以根据需要在 laravel 中使用原始查询来执行查询。如果您仍然需要连接实例,您可以创建一个类并实现 ConnectionResolverInterface:
use Illuminate\Database\ConnectionResolverInterface as Resolver
class connection implements Resolver
然后你就可以连接了:
$connector = new connection();
$connection = $connector->connection();
如果您使用的是模型连接,您可以通过以下方式获得连接:
$user = new User();
$user->getConnection();
您也可以使用 ConnectionFactory 建立新连接:
$connection = new Illuminate\Database\Connector\ConnectionFactory();
更多信息可以看laravel API doc
【讨论】:
很有趣,但这是创建新的连接实例,我能以某种方式获得现有的连接吗? 在同一界面上尝试 getDefaultConnection。 也许我不明白,也许你可以用代码更新你的答案。但据我所知getDefaultConnection,它只返回连接的字符串名称而不是具体的连接......跨度> 【参考方案2】:试试这个:
$pdo = $eloquentConnection->getConnection()->getRawPdo();
干杯
【讨论】:
以上是关于如何让 laravel DB 连接到 php 连接?的主要内容,如果未能解决你的问题,请参考以下文章