我一直试图找出一种方法来记录我在Zend Framework 1中使用的Eloquent ORM中的SQL查询。我遇到了以这种方式调用的getQueryLog()方法:
$queries = DB::getQueryLog();
我发现Illuminate \ Database \ Connection包含getQueryLog()方法,所以我尝试执行以下操作:
use Illuminate\Database\Connection as DB;
class IndexController
{
.
.
.
public function indexAction()
{
// do stuff (e.g. fetch/update/create rows)
$questions = Questions::all()
.
.
$queries = DB::getQueryLog();
var_dump($queries); exit;
.
// render view
}
}
但是,我收到以下通知,它返回NULL:Notice: Undefined property: IndexController::$queryLog in /var/www/qasystem/vendor/illuminate/database/Illuminate/Database/Connection.php on line 918
NULL
有人可以建议我如何在Laravel之外使用它吗?我在网上搜索过,无法看到我需要做的任何事情,尽管我怀疑大多数例子都会在Laravel中使用。另外,Illuminate \ Database \ Connection是正确的类吗?感谢
答案 0 :(得分:2)
请改用toSql
方法。它会返回最后的查询命令。
有关详细信息,请参阅How do I get the query builder to output its raw SQL query as a string?
答案 1 :(得分:0)
尽管年龄稍大-我只是遇到了同样的问题,并且使用toSql()
并没有帮助我,因为我有多对多的关系并且Eloquent执行了更多的查询。
基于@patricus的comment,我可以这样工作:
function getTheThing() {
(new Thing())->getConnection()->enableQueryLog();
$thing = Thing::whereUid('something')
->with('AnotherThing')
->first();
$loggedSqls = (new Thing())->getConnection()->getQueryLog();
var_dump($loggedSqls);
}