通过 Eager Loading 从 Eloquent 获取 RAW SQL 查询
Posted
技术标签:
【中文标题】通过 Eager Loading 从 Eloquent 获取 RAW SQL 查询【英文标题】:Get RAW SQL Query from Eloquent with Eager Loading 【发布时间】:2014-08-14 00:37:02 【问题描述】:我有以下代码:
$books = Book::with(array('score' => function($query) use ($id)
$query->where('media_type_id','=',$id)->orderBy('sorting_score','ASC');
))->get();
我有一张有书的桌子和一张有 media_score 的桌子 - 我有一个 belongsTo 关系。
当我执行 toSQL();它只返回我 select * from books ,而不是一个急切的加载等效项。
我需要急切加载等效项,因为我希望使用缓存系统(没有记忆功能),所以我想使用原始查询作为键。
转储查询日志不是一个选项,因为它发生在查询运行之后。
【问题讨论】:
查询生成器有一个函数getEagerLoads()
,您可以在这里使用。
当我使用 getEagerLoads 而不是 get() - 我得到一个空白
@WereWolf-TheAlpha 如前所述,查询是为了制作一个哈希键,因此无法通过查询日志进行转储。
【参考方案1】:
试试这个plugin by barryvdh。它真的会帮助你调试你的 laravel 应用程序。它包括几个收藏家
QueryCollector:显示所有查询,包括绑定 + 计时。 RouteCollector:显示有关当前路线的信息。 ViewCollector:显示当前加载的视图。 (可选:显示共享数据) EventsCollector:显示所有事件。
等等
编码愉快;
【讨论】:
【参考方案2】:试试
DB::enableQueryLog();
Book::with(array('score' => function($query) use ($id)
$query->where('media_type_id','=',$id)->orderBy('sorting_score','ASC');
))->get();
$query_dump = DB::getQueryLog();
并打印$query_dump
【讨论】:
以上是关于通过 Eager Loading 从 Eloquent 获取 RAW SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
Laravel - Eager Loading BelongsToMany 关系
Laravel Eager Loading - 仅加载特定列