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 中获取插入的多行数据