Cách bền vững nhất để có được thông tin tổng hợp trên các lĩnh vực là gì?


12

EntityFieldQuery không có ý định được sử dụng để chạy các hàm tổng hợp (SUM, AVG, v.v.) trên dữ liệu trường vì nó không liên quan đến SQL. Điều đó nói rằng, hoạt động hợp pháp cần phải được chạy theo thời gian. Theo hàm SQL với EntityFieldQuery và đặc biệt là EntityFieldQuery và cách sử dụng các hàm tổng hợp SUM, ARG và MAX , các truy vấn SQL cần được sử dụng và cách tiếp cận đó phù hợp nhất với trường hợp sử dụng của tôi. Tôi đã nói chuyện với @chx ngày hôm qua và anh ấy khuyên nên sử dụng một vài hàm nội bộ để tìm tên trường và tên cột. Tôi chỉ tự hỏi liệu điều này có bền vững không và liệu nó có phù hợp để thực hiện trong một cơ sở mã mà tôi có thể phát hành cho otehrs không.

Nếu đó là cách tốt nhất, thì đó là cách tốt nhất. Tôi chỉ không muốn làm điều đó trước khi tôi hoàn toàn chắc chắn bởi vì nó cảm thấy lộn xộn.


Hiện tại, tôi chỉ sử dụng các chức năng nội bộ ( _field_sql_storage_tablename($field)_field_sql_storage_columnname($field_name, $column) phù hợp với nhu cầu hiện tại của mình, nhưng nó không bền vững, vì vậy vẫn nên quan tâm đến câu trả lời cho câu hỏi này.
wizonesolutions

Câu trả lời:


2

Các Xem lĩnh vực mô-đun cho phép bạn để lộ bảng lĩnh vực như bảng cơ sở để xem. Điều này khác với hành vi mặc định của Chế độ xem trong đó bảng cơ sở là bảng trường và không phải là một thực thể mà dữ liệu trường được tải từ đó. Ví dụ: khi chọn nút làm bảng cơ sở, sau đó bạn có thể thêm các trường, nhưng chính (bảng cơ sở) trong truy vấn vẫn là nút mà tùy thuộc vào dữ liệu của bạn có thể làm hỏng các hàm tổng hợp (còn gọi là mối quan hệ nhiều-một của một số các trường đến nút).

Trường khung nhìn cho phép bạn truy cập trực tiếp vào các bảng trường có nghĩa là các hàm tổng hợp hoạt động đúng. Ngoài ra, nếu bạn cần thực hiện "tham gia" thú vị vào các bảng trường khác, bạn có thể kiểm soát chúng hoàn toàn bằng cách sử dụng các mục sau.

/**
 * Implements hook_views_data_alter().
 */
function mymodule_views_data_alter(&$data) {
  views_field_add_multi_join($data, /* see docs */);
}

Điều này khá đơn giản để sử dụng và cho phép bạn thực hiện các hàm tổng hợp trên nhiều bảng trường cùng một lúc. Sau đó, bạn có thể gọi thủ công một chế độ xem$view->execute() và kéo kết quả ra khỏi chế độ xem. Có những ví dụ về điều này trong tài liệu quan điểm.

Lợi ích của cách tiếp cận này đối với EntityFieldQuery là bạn có thể quản lý quy trình trong Chế độ xem (mà hầu hết mọi người sẽ sử dụng) và cho phép nó thực hiện việc xây dựng truy vấn vật lý theo cách ít trực tiếp hơn giúp nâng cao khả năng phá vỡ con đường. Ngoài ra, nhiều lần bạn sẽ muốn hiển thị dữ liệu tổng hợp như vậy trên màn hình quản trị mà sau đó bạn có thể sử dụng chế độ xem để cung cấp cả màn hình và truy cập kết quả theo mã cho các mục đích bổ sung.


Tôi sẽ phải kiểm tra điều này. Tôi có thể trao đổi mã đó vào các trường được tính toán thay vì thực hiện truy vấn theo cách thủ công. Có lẽ tôi sẽ làm việc trên trang web nơi tôi cần điều này sớm và sẽ báo cáo lại vào một lúc nào đó. Nếu nó hoạt động, tôi sẽ chấp nhận.
wizonesolutions

0

Điều này có thể được thực hiện trong một mô-đun bổ trợ để xem không? Nó xử lý các truy vấn rất tốt và một số kết quả được công bố với các hàm tổng hợp, chẳng hạn như trong các hành động khi các bộ lọc theo ngữ cảnh không thành công, nơi nó có thể mặc định cho tất cả các giá trị và tính tổng các kết quả khả dụng trong mỗi kết quả. Các chức năng cho các truy vấn nên có nhưng hình thức UI sẽ cần thiết cho nó. Hãy cho tôi biết nếu điều này có ý nghĩa. Tôi chỉ mới bắt đầu mổ xẻ quan điểm và đang suy đoán.


Truy vấn COUNT có thể được chạy trên các thực thể, vì vậy điều đó đã được giải quyết. Tôi quan tâm nhiều hơn đến bản thân SUM. Views_calc có thể cung cấp cái nhìn sâu sắc, nhưng tôi muốn sử dụng giá trị trong Trường được tính toán ... điều mà tôi có thể làm tốt với Views_get_view_result (hoặc tương tự). Tuy nhiên, việc có được Lượt xem để tạo truy vấn đó ở vị trí đầu tiên là mẹo. Có vẻ như cách hackish có thể là tốt nhất. Tôi đoán tôi sẽ bắt đầu với điều đó bởi vì nếu tôi không phát hành nó, tôi sẽ là vàng. Nếu tôi làm, hy vọng ai đó sẽ gửi một bản vá.
wizonesolutions
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.