Thay đổi một tham gia bên trong thành một tham gia bên trái trong quan điểm 3.3?


7

Sử dụng chế độ xem 3.3, tôi có một chế độ xem trong Drupal 7 nơi tôi đang hiển thị hai loại nội dung. Tôi có một tiêu chí lọc dựa trên giá trị của một trường chỉ được gắn với một trong các loại nội dung. Chừng nào tôi còn có tiêu chí trường đó, các chế độ xem đang thực hiện INNER JOIN, điều đó khiến nó không trả về các chế độ xem của loại nội dung đầu tiên không có trường đó được đính kèm.

Tôi sao chép các truy vấn từ giao diện, thay đổi INNERmột LEFTtham gia, dán nó vào vỏ mysql, và tôi đã nhận tất cả các hàng mà tôi mong đợi để có được. Nhưng tôi không biết làm thế nào để thực hiện những thay đổi đó trong trình chỉnh sửa chế độ xem.

Tôi đã chơi xung quanh trong khối 'mối quan hệ' trên trình chỉnh sửa chế độ xem, nhưng tôi không thấy nơi tôi có thể thay đổi loại tham gia.

Tôi có thể thay đổi cách xem 3,3 không tham gia không?


2
Chỉ là một ghi chú; hành vi này là một lỗi trong Lượt xem 3.5+: drupal.org/node/1766338
ge Muffguy

Câu trả lời:


19

Tôi thấy nhấp vào reduce duplicateshộp kiểm đã chuyển đổi INNER JOINsthành LEFT JOINs:

miêu tả giảm trùng lặp tickbox

Trước khi tôi nhận được một cái gì đó giống như sau đây được đưa vào truy vấn của tôi:

INNER JOIN {field_data_field_random_field field_data_field_random_field} 
        ON node.nid = field_data_field_random_field.entity_id 
       AND (field_data_field_random_field.entity_type = 'node' 
       AND field_data_field_random_field.deleted = '0')

Những sự kết hợp bên trong này đã được gây ra bởi các bộ lọc phân loại đơn giản, thật đáng buồn là tôi không có bất kỳ mối quan hệ nào để không hỏi. Tuy nhiên, việc chọn hộp này dường như không làm thay đổi truy vấn của tôi theo bất kỳ cách nào khác, hãy lưu lại để xóa các liên kết bên trong, điều này hoàn hảo đối với tôi; và có thể giúp đỡ người khác ngoài kia trong cuộc phiêu lưu khỉ rộng lớn này được gọi là sự sống.


1
Điều này hữu ích khi bạn thêm các bộ lọc như trường boolean, thuật ngữ phân loại, v.v ... Cảm ơn!
ge Muffguy

Tùy chọn "Giảm trùng lặp" sẽ không xem xét các nút đó nếu chúng không có trong bảng của trường tham gia. Vì vậy, hook_views_query_alter()giải pháp có vẻ hứa hẹn hơn trong trường hợp này.
Pratip Ghosh

11

Tôi đã từng hook_views_query_alter()thay đổi nó. Nó có một tham chiếu đến các đối tượng truy vấn $ view và $. Tôi đã kiểm tra tên của khung nhìn để xem nó có phải là cái tôi muốn không, và sau đó thay đổi loại tham gia trong đối tượng truy vấn cho bảng quan tâm:

function my_module_views_query_alter(&$view, &$query) {
  if($view->name == 'my_view') {
    $query->table_queue['field_data_field_my_field']['join']->type = "LEFT";
  }
}

Tại sao bạn muốn sử dụng view_query_alter khi nó có thể được thực hiện bằng GUI hiện có? drupal.stackexchange.com/questions/52449/ từ
Gokul NK

mã này làm lỗi này cho tôi: Fatal error: Call phương pháp xác định stdClass :: build_join () trong C: \ xampp \ htdocs \ sarpoosh \ trang web \ all \ modules \ xem \ plugins \ views_plugin_query_default.inc on line 1313
shekoufeh

2
@GokulNK Bởi vì không phải tất cả các chế độ xem đều sử dụng Mối quan hệ (chế độ xem của OP không) và tùy chọn UI này không khả dụng cho các tham gia không dựa trên Mối quan hệ.
coredumperror

4

Khi bạn chuyển đến tab Mối quan hệ trong chế độ xem, bạn sẽ tìm thấy hộp kiểm có tiêu đề "Yêu cầu mối quan hệ này".

nhập mô tả hình ảnh ở đây

  1. Nếu bạn chọn hộp kiểm này, điều đó có nghĩa là: Thực hiện tham gia bên trong
  2. Nếu bạn bỏ chọn hộp kiểm này, điều đó có nghĩa là: Hãy tham gia bên trái

Tôi vừa gặp phải một vấn đề như thế này. Tôi nghĩ vấn đề là "Yêu cầu mối quan hệ này", nhưng việc thay đổi nó không khắc phục được vấn đề. Kiểm tra "giảm trùng lặp" đã khắc phục sự cố cho tôi.
ndvo

1

Chỉ cần thêm một số thông tin cho đầy đủ cho những người sử dụng các nhóm AND / OR trong chế độ xem của họ.

Tôi có một Tiêu chí lọc mà nếu tôi chuyển đổi hai điều kiện cuối thì nó sẽ thay đổi nó giữa một liên kết bên trong và một liên kết bên trái.

Để giải thích Tiêu chí bộ lọc hiện tại của tôi về cơ bản là:

(Published = "Yes" AND Content Type = "Blog) AND ((Blog Type = "X") OR (Blog Type IS NULL))

Việc sử dụng THAM GIA VÀ không mang lại cho tôi kết quả tôi muốn. Nếu tôi chỉ trao đổi hai điều kiện cuối cùng trong HOẶC nó sẽ thay đổi loại THAM GIA:

(Published = "Yes" AND Content Type = "Blog) AND ((Blog Type IS NULL) OR (Blog Type = "X"))

Điều này sử dụng một THAM GIA TRÁI PHIẾU. Đi con số, nhưng có thể hữu ích cho người khác.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.