【问题标题】:Get RAW SQL Query from Eloquent with Eager Loading通过 Eager Loading 从 Eloquent 获取 RAW SQL 查询
【发布时间】: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 如前所述,查询是为了制作一个哈希键,因此无法通过查询日志进行转储。

标签: php sql laravel laravel-4 eloquent


【解决方案1】:

试试这个plugin by barryvdh。它真的会帮助你调试你的 laravel 应用程序。它包括几个收藏家

  1. QueryCollector:显示所有查询,包括绑定 + 计时。
  2. RouteCollector:显示有关当前路线的信息。
  3. ViewCollector:显示当前加载的视图。 (可选:显示共享数据)
  4. 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多