Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Allgemeines zu Drupal ›

Verschachtelte UND / ODER Abfrage mit hook_views_query_alter

Eingetragen von montviso (2188)
am 01.03.2021 - 19:57 Uhr in
  • Allgemeines zu Drupal
  • Drupal 8.x

Ich habe eine Media-View, um einen Entity-Browser zu erstellen.
Die Bilder, die in dieser View selektiert werden, haben ein zusätzliches Referenzfeld auf alle User einer bestimmten Rolle (Intranet) und es kann entweder kein User oder mehrere User ausgewählt sein.

Wenn eine Auswahl getroffen ist, dann soll der angemeldete User nur Bilder mit seiner Userid sehen.
Und er sieht alle Bilder, bei denen keine Auswahl getroffen wurde.

In der Media-Entity-Browser-View kann ich keinen Und/Oder Filter auf den angemeldeten Benutzer machen.
Deshalb habe ich es mit einer views_query_alter Funktion gelöst.

So sieht die Funktion aus:

<?php
function pdf_options_views_query_alter(Drupal\views\ViewExecutable $view, Drupal\views\Plugin\views\query\Sql $query){

     if (
$view->id() == 'media_entity_browser') {
       
$userid = \Drupal::currentUser()->id();
       
$query->addWhere('2', 'media__field_gesellschafter.field_gesellschafter_target_id', $userid , '=');
    }
}
?>

Die SQL-Vorschau sieht dann so aus.

SELECT media_field_data.mid AS mid
FROM
{media_field_data} media_field_data
LEFT JOIN {media__field_gesellschafter} media__field_gesellschafter ON media_field_data.mid = media__field_gesellschafter.entity_id AND media__field_gesellschafter.deleted = '0'
WHERE (media_field_data.bundle IN ('bilderpool_75x110')) AND
(
  (media__field_gesellschafter.field_gesellschafter_target_id IS NULL)
  OR (media__field_gesellschafter.field_gesellschafter_target_id = '33')
)

In diesem Fall ist 33 die Userid des angemeldeten Users.

Die View funktioniert also korrekt.
Ich weiß allerdings nicht warum. ;-)

Woher weiß die View, dass ich mit

<?php
$query
->addWhere('2', 'media__field_gesellschafter.field_gesellschafter_target_id', $userid , '=');
?>

diese geschachtelte UND / Oder Abfrage erzeugen möchte?

Ich habe auch Beispiele gefunden, wo der Ausdruck so geheißen hat:

<?php
$query
->addWhere('OR', 'media__field_gesellschafter.field_gesellschafter_target_id', $userid , '=');
?>

Das hat aber nicht zum richtigen Ergebnis geführt.

Ich habe kein vernünftiges Tutorial zum Thema $query->addWhere gefunden.
Und auch die Beschreibung des Hooks hat mich nicht schlauer gemacht.

Meine Vermutung: Die 2 steht einfach für die AbfrageGruppe?

Kann jemand was dazu sagen?

‹ Groups und Drupal 9 Wie in einer view field output überschreiben? ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

addWhere fügt eine Oderbedingung hinzu

Eingetragen von ronald (3857)
am 05.04.2021 - 09:57 Uhr

Da eine UserID nur einen Wert haben kann, machen nur Oderbedingungen Sinn.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ronald, danke für Deine

Eingetragen von montviso (2188)
am 05.04.2021 - 11:35 Uhr

Ronald, danke für Deine Mühe.
Ich weiß schon gar nicht mehr, was ich da vor hatte. ;-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Wochen 2 Tagen
  • Hey danke
    vor 2 Wochen 2 Tagen
  • Update: jetzt gibt's ein
    vor 2 Wochen 3 Tagen
  • Hallo, im Prinzip habe ich
    vor 3 Wochen 1 Tag
  • Da scheint die Terminologie
    vor 3 Wochen 1 Tag
  • Kannst doch auch alles direkt
    vor 3 Wochen 5 Tagen
  • In der entsprechenden View
    vor 3 Wochen 5 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 5 Tagen
  • gelöst
    vor 6 Wochen 1 Tag
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20453

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 28 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association