drupal 7 – Se une y busca valores NULL

Pregunta:

Estoy usando el módulo de banderas para permitir que los usuarios marquen sus preguntas como resueltas, similar a cómo funciona en este sitio. Por lo tanto, quiero permitir que los usuarios filtren las publicaciones para mostrar solo las preguntas sin resolver. Además, es posible que algunas publicaciones no sean preguntas en absoluto. Por lo tanto, no pueden tener una marca de "resuelto", pero tampoco deberían aparecer en los resultados cuando se filtran solo por preguntas sin resolver. Por lo tanto, necesito unir la tabla de nodos con otras dos: flag_content y field_data_field_question (esta última tabla es lo que dice si una publicación es una pregunta o no).

Aquí está el código actual que estoy probando:

$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');

Sin embargo, esto da como resultado el siguiente error:

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).

¿No es esta la forma correcta de pasar valores NULL a una consulta?

Respuesta:

La API de la base de datos tiene una forma preferida de agregar expresiones de este tipo, a saber, las SelectQuery::isNull() y SelectQuery::isNotNull() . Puedes usarlos así:

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

$query->isNotNull('q.field_question_value');

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım