2014-12-10 1 views
1

В Laravel 4.2 Я хочу получить скомпилированный запрос.laravel Eloquent ORM - Как получить скомпилированный запрос?

Это то, что я есть:

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

Я хочу скомпилирован запрос как:

select * from products where id = 100 

Цель этого вопроса: я хочу, чтобы использовать его в качестве суб запроса в другой запрос.

Я нашел и нашел Class Grammer и Class MySQL Но я не нашел решения для этого.

Есть ли решение?

Ваша помощь будет оценена.

+0

Это, как вы делаете это http://stackoverflow.com/a/24838367/784588 –

ответ

-1

Вы можете использовать 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(); 

Этот дополнительный подзапрос к вашему основному запросу.

4

Самый простой способ - это, вероятно, в основном выяснить, какой запрос был только что выполнен, а не каким будет запрос. Что-то вроде этого:

function latestQuery() 
{ 
    $queries = DB::getQueryLog(); 
    return end($queries); 
} 

Надеюсь, это то же самое для ваших целей.

+0

моя цель что-то другое. Я хочу использовать его как «подзапрос» в другом запросе. –

+0

Вам действительно нужно лучше объяснить, что вам нужно, потому что это самое близкое к тому, что вы получите до фактического запроса. – Martijn

1

Вы можете зарегистрировать прослушиватель событий в файле маршрутов (на этапе разработки), который будет прослушивать событие запроса laravel и var_dump выполненный запрос.

Event::listen('illuminate.query', function($sql) 
{ 
    var_dump($sql); 
}); 

Но это окажется беспорядочным. Поэтому лучше используйте что-то вроде Clockwork. Это потрясающе, вы можете просмотреть весь выполненный запрос в своем браузере.

+0

Моя цель - это нечто иное. Я хочу использовать его как «подзапрос» в другом запросе. –

+0

Что именно вы намерены делать? Более конкретно. – Shhetri

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