Tôi tìm thấy một cách giải quyết!
Mã SQL này về cơ bản mang lại cho tôi những gì tôi đang tìm kiếm:
chọn * từ content_moderation_state_field_revision trong đó (content_entity_id, content_entity_revision_id) trong
(
chọn content_entity_id, MAX(content_entity_revision_id) từ nhóm content_moderation_state_field_revision theo content_entity_id
)
vàmoderation_state = 'bản nháp'
Lưu ý rằng các hàm MAX và nhóm theo tất cả đều nằm trong truy vấn con SQL, truy vấn này không yêu cầu bất kỳ đầu vào $row nào. Vì vậy, tôi đã tạo một hàm trong mô-đun của mình để xuất kết quả của truy vấn con đó và thêm nó làm điều kiện trong truy vấn bộ lọc plugin. Như thế này:
/**
* Hàm trợ giúp xây dựng truy vấn.
*/
truy vấn hàm công khai() {
if (!empty($this->value)) {
// Lượt xem plugin xử lý tham gia: https://api.drupal.org/api/drupal/core%21modules%21views%21src%21Plugin%21views%21join%21JoinPluginBase.php/group/views_join_handlers/8.2.x
$cấu hình = [
'loại' => 'BÊN TRONG',
'bảng' => 'content_moderation_state_field_revision',
'trường' => 'content_entity_id',
'left_table' => 'node_field_data',
'left_field' => 'không',
'toán tử' => '=',
];
$join = Lượt xem::pluginManager('join')->createInstance('chuẩn', $configuration);
$this->query->addRelationship('content_moderation_state_field_revision', $join, 'node_field_data');
$this->query->addGroupBy("content_moderation_state_field_revision.content_entity_id");
$revision_ids = sbn_moderation_state_sql_subquery(); // trả vềhighest_entity_revision_id
$this->query->addWhere('AND', 'content_entity_revision_id', $revision_ids, 'IN');
$this->query->addWhere('AND', 'moderation_state', $this->value, 'IN');
}
}
Tôi vẫn có mệnh đề addGroupBy, nhưng tôi không nghĩ nó cần thiết vì hàm MAX nằm trong truy vấn con đảm nhiệm việc trả về content_entity_revision_id cao nhất cho mỗi nút.
Tất nhiên, tôi vẫn không biết cú pháp chính xác để thêm hàm MAX() trong cú pháp truy vấn plugin sql api. Nếu có ai biết, xin vui lòng thêm câu trả lời đó.
Dù sao, bộ lọc hoạt động như một nét duyên dáng -- Tôi có thể lọc chế độ xem theo các nút đã xuất bản hoặc bản nháp hoặc cả hai.