it-swarm-vi.com

Nhận truy vấn thực tế được thực hiện bởi một khung nhìn

Tôi cần tìm ra truy vấn SQL được thực hiện bởi một truy vấn nhất định. Mô-đun khung nhìn có thể hiển thị SQL khi định cấu hình chế độ xem nhưng rõ ràng truy vấn không phải là truy vấn thực tế được chạy trong mọi trường hợp .
[.__.] Tôi biết rằng mô-đun Devel có thể hiển thị các truy vấn cơ sở dữ liệu, nhưng không có cách nào để devel hiển thị các truy vấn thực tế ngoại trừ nhấp vào liên kết 'A' được liên kết với mọi truy vấn và có hàng trăm người trong số họ .

Làm cách nào tôi có thể tìm ra truy vấn thực tế mà chế độ xem thực thi? Khung nhìn được hiển thị dưới dạng một khối.

22
jjei

Bạn phải sử dụng hook_view_pre_execute và với Devel đã cài đặt, hãy sử dụng dpq để xem Chuỗi SQL:

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

Không cần phải vá hoặc móc.

// 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));

Cung cấp điều này như đầu ra

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

Vui lòng thử bản vá này:

--- 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

// Nhận kết quả bằng cách xem tên và bộ lọc bối cảnh nid tại đây

    $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;

Xem tài liệu để tham khảo thêm: https://api.drupal.org/api/view/view.module/feft/view_get_view_result/7.x-3.x

0
Sameer Choudhary