Schließt sich an und sucht nach NULL-Werten


19

Ich benutze das Flag-Modul, damit Benutzer ihre Fragen als gelöst markieren können, ähnlich wie es auf dieser Site funktioniert. Ich möchte daher, dass Benutzer Beiträge filtern, um nur ungelöste Fragen anzuzeigen. Darüber hinaus sind einige Posts möglicherweise überhaupt keine Fragen. Daher können sie kein "Gelöst" -Flag haben, sollten aber auch NICHT in den Ergebnissen angezeigt werden, wenn nur nach ungelösten Fragen gefiltert wird. Daher muss ich die Knotentabelle mit zwei anderen verknüpfen: flag_contentund field_data_field_question(diese letztere Tabelle gibt an, ob ein Beitrag eine Frage ist oder nicht).

Hier ist der aktuelle Code, den ich versuche:

$query->join('flag_content', 'f', 'f.content_id = n.nid AND f.content_type = "node" AND f.fid = 5');
$query->join('field_data_field_question', 'q', 'q.entity_id = n.nid AND q.field_question_value = 1');
$query->condition('f.fid', 'NULL', 'IS');
$query->condition('q.field_question_value', 'NULL', 'IS NOT');

Dies führt jedoch zu folgendem Fehler:

PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''NULL') AND (q.field_question_value IS NOT 'NULL')
LIMIT 21 OFFSET 0' at line 4: SELECT n.nid AS nid
FROM
{node} n
INNER JOIN {field_data_field_category} t ON t.entity_id = n.nid
INNER JOIN {flag_content} f ON f.content_id = n.nid AND f.content_type = "node" AND f.fid = 5 
INNER JOIN {field_data_field_question} q ON q.entity_id = n.nid AND q.field_question_value = 1
WHERE (t.field_category_tid = :db_condition_placeholder_0) AND (f.fid IS :db_condition_placeholder_1) AND (q.field_question_value IS NOT :db_condition_placeholder_2)
LIMIT 21 OFFSET 0; Array 
( [:db_condition_placeholder_0] => 464 [:db_condition_placeholder_1] => NULL [:db_condition_placeholder_2] => NULL
)
in queryExecuteRender_recentActivity() (line 57 of someFile.php).

Ist dies nicht die richtige Methode, um NULLWerte an eine Abfrage zu übergeben?

Antworten:


31

Die Datenbank-API hat tatsächlich eine bevorzugte Möglichkeit, Ausdrücke dieses Typs hinzuzufügen, nämlich die SelectQuery::isNull()und SelectQuery::isNotNull()-Funktionen. Sie können sie wie folgt verwenden:

$query->isNull('f.fid');

$query->isNotNull('q.field_question_value');
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.