Am găsit o soluție!
Acest cod SQL îmi oferă în esență ceea ce caut:
selectați * din content_moderation_state_field_revision unde (content_entity_id, content_entity_revision_id) în
(
selectați content_entity_id, MAX(content_entity_revision_id) din grupul content_moderation_state_field_revision după content_entity_id
)
și moderation_state = „schiță”
Rețineți că funcțiile MAX și gruparea după sunt toate în subinterogarea SQL, care nu necesită nicio intrare $row. Deci, am creat o funcție în modulul meu pentru a scoate rezultatele acelei subinterogări și am adăugat-o ca o condiție în interogarea filtrului plugin. Ca aceasta:
/**
* Funcția de ajutor care creează interogarea.
*/
interogare de funcție publică () {
dacă (!gol ($această->valoare)) {
// Afișează pluginul de gestionare a unirii: https://api.drupal.org/api/drupal/core%21modules%21views%21src%21Plugin%21views%21join%21JoinPluginBase.php/group/views_join_handlers/8.2.x
$configurare = [
'type' => 'INNER',
'table' => 'content_moderation_state_field_revision',
'field' => 'content_entity_id',
'left_table' => 'node_field_data',
'left_field' => 'nid',
'operator' => '=',
];
$join = Views::pluginManager('join')->createInstance('standard', $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(); // returnează cel mai mare ID_reviziune_entității
$this->query->addWhere('AND', 'content_entity_revision_id', $revision_ids, 'IN');
$this->query->addWhere('AND', 'moderation_state', $this->value, 'IN');
}
}
Mai am clauza addGroupBy, dar nu cred că este necesară deoarece funcția MAX se află în subinterogarea care se ocupă de returnarea celui mai mare content_entity_revision_id pentru fiecare nod.
Desigur, încă nu cunosc sintaxa corectă pentru adăugarea funcției MAX() în sintaxa api SQL de interogare a pluginului de vizualizare. Daca stie cineva, va rog sa adaugati si raspunsul.
Oricum, filtrul funcționează ca un farmec -- pot filtra vizualizarea după noduri publicate sau schiță sau ambele.