2010-03-10 14 views
6

Estoy intentando hacer una combinación en 2 tablas en Zend, usando la estructura DbTable/model/mapper. Si, en mi asignador, hago esto:"IS NULL" en Zend_Db_Table select not working

$select = $this->getDbTable()->select(Zend_Db_Table::SELECT_WITH_FROM_PART) 
     ->setIntegrityCheck(false) 
     ->join('images', 'images.oldFilename = 
               availablePictures.filename') 
       ->where('images.ref IS NOT NULL'); 
$resultSet = $this->getDbTable()->fetchAll($select); 

funciona como un encanto, pero si lo intento lo mismo con IS NULL en lugar de NOT NULL, me sale nada donde debería obtener un conjunto de resultados de varias filas, al igual que cuando lo intento directamente en MySQL con

SELECT * 
FROM (
`availablePictures` AS a 
LEFT JOIN `images` AS i ON a.filename = i.oldFilename 
) 
WHERE i.`ref` IS NULL 

me da la impresión de Zend no le gusta mi es nulo o estoy haciendo algo mal?

+2

Ha intentado Zend_Debug :: dump ($ select -> __ toString()); exit; para ver el sql que genera? Si copias pegando ese enunciado sql en mysql, ¿obtienes los resultados correctos? Si no, ¿qué es diferente de la versión de mecanografía manual? – PatrikAkerstrand

+0

Gracias Máquina! Al hacerlo, descubrí que Zend estaba creando una unión interna en lugar de la combinación de la izquierda que necesitaba. Entonces, al usar -> joinLeft() mi problema fue resuelto. – Peter

Respuesta

13

La solución se encontraba en el comentario de la máquina en mi post original. Haciendo lo que sugiere Noté que Zend creado una unión interna como yo estaba usando el método de selección equivocada, por lo que:

$select = $this->getDbTable()->select(Zend_Db_Table::SELECT_WITH_FROM_PART) 
     ->setIntegrityCheck(false) 
     ->joinLeft('images', 'images.oldFilename = 
               availablePictures.filename') 
       ->where('images.ref IS NOT NULL'); 
$resultSet = $this->getDbTable()->fetchAll($select); 

es como debe ser.

+0

@Peter - debe marcar esto como la respuesta correcta :) – karim79

+0

@Karim, no puedo! No por 2 días. Stackoverflow solo permite aceptar tu propia respuesta después de 2 días. :) – Peter

2

Mi pensamiento es que tiene que ver con la forma en que MySql decide qué es NULL y qué no. ¿Es posible que los resultados que espera tengan una asignación predeterminada de la cadena vacía '' o 0 en la columna images.ref? MySql no no los trata como NULL. Echar un vistazo aquí:

http://dev.mysql.com/doc/refman/4.1/en/working-with-null.html

+0

Hola, Karim, gracias por la entrada, pero es NULO en esa columna, no '' ni 0, lo revisé y simplemente comprobé dos veces. Actualmente rastreando el comentario de Machine, está en algo. – Peter