web-gelistirme-sc.com

Bir görünüm tarafından yürütülen gerçek sorguyu alın

Belirli bir sorgu tarafından yürütülen SQL sorgusu bulmak gerekiyor. Görünümler modülü, görünümü yapılandırırken SQL'i gösterebilir ancak görünüşe göre sorgu, her durumda çalıştırılan gerçek sorgu değildir .
Devel modülünün veritabanı sorgularını gösterebileceğini biliyorum, ama devel ile her sorguyla ilişkili 'A' bağlantısını tıklamak dışında gerçek sorguları göstermenin bir yolu yok ve yüzlerce onları .

Görünümün yürüttüğü gerçek sorguyu nasıl bulabilirim? Görünüm bir blok olarak görüntülenir.

22
jjei

SQL Dizesini görüntülemek için hook_views_pre_execute ve Devel yüklü kullanım dpq kullanmanız gerekir:

function hook_views_pre_execute(&$view) {
  dpq($view->build_info['query']);
}
39
Countzero

Yamalara veya kancalara gerek yok.

// Run the view.
$view = views_get_view('frontpage');
$view->set_display('page');
$view->pre_execute();
$view->execute();

/* Magic Below Here */
// Get query from the view.
$query = $view->query->query();

// Format SelectQueryInterface into a string.
$string = (string) $query;

// Replace arguments.
$arguments = $query->arguments();
if (!empty($arguments) && is_array($arguments)) {
  foreach ($arguments as $placeholder => &$value) {
    if (is_string($value)) {
      $value = "'$value'";
    }
  }
  $string = strtr($string, $arguments);
}

// Format the query string for more readable output.
$string = str_replace(array(' {', "\n{"), ' ', $string);
$string = str_replace(array('} ', "}\n"), ' AS ', $string);
$string = str_replace(', ', ",\n  ", $string);
$string = str_replace(' AND ', "\n  AND ", $string);
$string = str_replace(' ON ', "\n  ON ", $string);
$string = str_replace('SELECT ', "SELECT\n  ", $string);
$string = str_replace('ORDER BY ', "ORDER BY\n  ", $string);

// echo $string;
echo str_replace('  ', '  ', nl2br($string));

Bunu çıktı olarak verir

SELECT
  node.sticky AS node_sticky,
  node.created AS node_created,
  node.nid AS nid,
  'frontpage:page' AS view_name
FROM  node AS node
WHERE (( (node.promote <> 0)
  AND (node.status = 1) ))
ORDER BY
  node_sticky DESC,
  node_created DESC
LIMIT 10 OFFSET 0
3
mikeytown2
function hook_views_pre_execute(&$view) {
  if ($view->name == 'XYZ') {
    $query = (string)$view->build_info['query'];
    echo $query;
  }
}
3
Sandesh Manghale

Lütfen bu yamayı deneyin:

--- a/sites/all/modules/views/plugins/views_plugin_query_default.inc
+++ b/sites/all/modules/views/plugins/views_plugin_query_default.inc
@@ -1393,6 +1393,19 @@ class views_plugin_query_default extends     views_plugin_query {
           $query->range($offset, $limit);
         }

+        $query_string = (string)$query;
+        $query_string = str_replace('{', '', $query_string);
+        $query_string = str_replace('}', '', $query_string);
+        $query_params = $query->getArguments();
+        foreach($query_params as $placeholder => $value) {
+          if(!is_numeric($value)) {
+            $query_string = str_replace($placeholder, "'$value'",    $query_string);
+          }
+          else {
+            $query_string = str_replace($placeholder, $value, $query_string);
+          }
+        }
+        drupal_set_message($query_string);
         $result = $query->execute();

         $view->result = array();
1
Junaid

// Sonuçları Görünüme Göre Ad ve Bağlamsal Filtreye Göre Alın

    $viewr = views_get_view('top_block_on_product_display');
    $args[] = $myarg;
    $display_id = 'default';
    $viewr->set_arguments($args);
    $viewr->set_display($display_id);
    $viewr->execute();
    $view_content = $viewr->result;

Daha fazla referans için dokümana bakın: https://api.drupal.org/api/views/views.module/function/views_get_view_result/7.x-3.x

0
Sameer Choudhary