2013-04-22 9 views

Odpowiedz

9

Po zrobieniu wszystkiego, co prowadzi kwerenda być to dowolny z poniższych

\Model_Something::find('all'); 
\Model_Something::query()... 
\DB::query()... 
\DB::select()... 

Można użyć

echo \DB::last_query(); 

Aby zobaczyć, co ostatnio uruchamiane przez dowolne rozwiązanie, które było używane do wysyłania zapytań do bazy danych.

przykład Praca pochodzi z kodem produkcji:

$product = Model_Product::find('all', array(
    'related' => array(
       'i18ns', 
    ), 
    'where' => array(
       array('i18ns.variant_slug', $slug) 
    ) 
)); 

echo \DB::last_query(); 
exit; 

SELECT `t0`.`family_id` AS `t0_c0`, `t0`.`type_id` AS `t0_c1`, 
     `t0`.`sort_weight` AS `t0_c2`, `t0`.`active` AS `t0_c3`, 
     `t0`.`attribute_set` AS `t0_c4`, `t0`.`created_at` AS `t0_c5`, 
     `t0`.`updated_at` AS `t0_c6`, `t0`.`site_id` AS `t0_c7`, 
     `t0`.`temporal_start` AS `t0_c8`, `t0`.`temporal_end` AS `t0_c9`, 
     `t0`.`id` AS `t0_c10`, `t1`.`id` AS `t1_c0`, `t1`.`product_id` AS `t1_c1`, 
     `t1`.`language_id` AS `t1_c2`, `t1`.`slug` AS `t1_c3`, 
     `t1`.`variant_slug` AS `t1_c4`, `t1`.`title` AS `t1_c5`, 
     `t1`.`description` AS `t1_c6`, `t1`.`temporal_start` AS `t1_c7`, 
     `t1`.`temporal_end` AS `t1_c8` 
FROM `products` AS `t0` 
LEFT JOIN `product_i18n` AS `t1` 
    ON (`t0`.`id` = `t1`.`product_id`) 
WHERE `t1`.`variant_slug` = 'test-product' 
+0

próbowałem tej metody podczas wysyłania moje rozwiązanie, ale nie pracował dla ORM zapytanie, nie wiem, czy coś mi umknęło, czy nie, czy możesz napisać z zapytaniem o przykład, po prostu proszę o naukę. –

+0

Zaktualizowałem mój przykład dla ciebie –

+0

Działa również dla ORM, prawdopodobnie chodzi o to, że zapytanie, które chciałbyś zobaczyć, nie jest ostatnim zapytaniem. – WanWizard

2

Istnieje kilka sposobów, aby to osiągnąć. Jeśli chcesz wydrukować złożone zapytanie, użyj get_query(); metoda klasy zapytań ORM.

Poniżej znajduje się przykładowy kod, który drukuje zapytanie.

$queryToExecute = Model_Article::query() 
     ->select('author') 
     ->where('date', '<', time()) 
     ->where('draft', '=', 1); 


// This will print the query which is actually executed by your ORM 
echo $queryToExecute->get_query(); 

Jeśli chcesz się zalogować zapytanie i wykonać

$queryString = $queryToExecute->get_query(); 
Log::info("Query that is executed {$queryString} "); 

Jeśli chcesz analizować wydajność kwerendy, należy użyć DB profiler, umożliwiając w konfiguracji aplikacji.

nadzieję, że moje powyższe rozwiązanie rozwiązuje problemu

0

Po wykonać kwerendy, można użyć oświadczenie follow

echo \Database_Connection::instance(Model_Foo::$_connection)->last_query;

Powiązane problemy