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

Laravel 4.2 我想得到编译查询。

这就是我所拥有的:

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

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

select * from products where id = 100 

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

我已经搜索并找到了 Class GrammerClass MySQL 但我没有找到解决方案。

有什么解决办法吗?

您的帮助将不胜感激。

【问题讨论】:

标签: laravel laravel-4 eloquent compiled-query


【解决方案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);
      }
      

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

      【讨论】:

      • 我的目的是不同的。我想在另一个查询中将其用作“子查询”。
      • 你真的必须更好地解释你在追求什么,因为这是你最接近实际查询的地方。
      猜你喜欢
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 2016-06-13
      • 1970-01-01
      • 2015-05-16
      相关资源
      最近更新 更多