laravel Eloquent ORM - 如何获得编译查询?

Posted

技术标签:

【中文标题】laravel Eloquent ORM - 如何获得编译查询?【英文标题】:laravel Eloquent ORM - How to get compiled query? 【发布时间】:2015-02-08 05:34:15 【问题描述】:

在Laravel 4.2 我想得到编译查询。

这就是我所拥有的:

$product = Product::where('id', '=', '100')->get();

我想要编译的查询,例如:

select * from products where id = 100 

问题的目的是:我想在另一个查询中将其用作子查询。

我已经搜索并找到了 Class Grammer 和 Class mysql 但我没有找到解决方案。

有什么解决办法吗?

您的帮助将不胜感激。

【问题讨论】:

这就是你的做法***.com/a/24838367/784588 【参考方案1】:

你可以像这样得到 SQL 查询:

use DB;//write this at the top of the file above your Class 

DB::enableQueryLog();//Enable query logging
$product = Product::where('id', '=', '100')->get();
dd(DB::getQueryLog());//print the SQl query

【讨论】:

【参考方案2】:

您可以将grammer 用于subqueries,请参阅以下示例以供参考:

$users = DB::table('users')
             ->where('user.id', '=', $userID)
             ->join('product', 'product.userid',  '=', 'user.id');

$price = $users->select(array(DB::raw('SUM(price)')))
               ->grammar
               ->select($users); // Compiles the statement

$result = DB::table('users')->select(array(DB::raw("($price) as price)))->get();

这会在您的主查询中添加一个子查询。

【讨论】:

【参考方案3】:

您可以在您的路由文件中注册一个事件监听器(处于开发阶段),它将监听 laravel 查询事件和var_dump 执行的查询。

Event::listen('illuminate.query', function($sql)

    var_dump($sql);
);

但这会变得一团糟。所以最好使用Clockwork 之类的东西。太棒了,你可以在浏览器中查看所有执行的查询。

【讨论】:

我的目的是不同的。我想在另一个查询中将其用作“子查询”。 你到底打算做什么?更具体。【参考方案4】:

最简单的方法可能主要是找出刚刚执行的查询,而不是查询将是什么。像这样的:

function latestQuery()

    $queries = DB::getQueryLog();
    return end($queries);

希望这对您的目的是一样的。

【讨论】:

我的目的是不同的。我想在另一个查询中将其用作“子查询”。 你真的必须更好地解释你在追求什么,因为这是你最接近实际查询的地方。

以上是关于laravel Eloquent ORM - 如何获得编译查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Eloquent ORM laravel 中获取最后一个插入 ID

Angular JS 与 Laravel - 如何绑定 Eloquent ORM 数组以查看

Laravel:如何使用 eloquent ORM 查找未经过身份验证的用户的信息?

如何在 Laravel Eloquent ORM 中获取插入的多行数据

如何根据 laravel eloquent orm 中的两列进行查询

如何在我的 Eloquent ORM laravel 选择中包含一个过程?