Pregunta:
Estoy usando db_select()
y no entiendo la sintaxis del método fields()
. Estoy usando un join()
para unirme a otra mesa. Entonces, para las tablas t
y n
, quiero hacer algo como
SELECT t.tid, t.field1, t.field2, n.title, n.author
FROM table t INNER JOIN node n ON t.nid = n.nid;
yo tengo
$results = db_select('table', 't')
->fields( ... )
->join('node', 'n', 'n.nid = t.nid')
->execute();
Pero como puede ver, estoy perdido en los fields()
. Los ejemplos que he visto solo especifican campos para una tabla:
->fields('t', array('tid', 'field1', 'field2'))
¿Cuál es la sintaxis que quiero usar?
Respuesta:
Fácil, solo llame a fields () dos veces.
$query = db_select('table', 't');
$query->join('node', 'n', 'n.nid = t.nid');
$result = $query
->fields('t', array('tid', 'field1', 'field2'))
->fields('n', array('nid', 'field1', 'field2'))
->execute();
foreach ($result as $row) {
// Do something with $row.
}
Puede llamar a la mayoría de los métodos varias veces (varios campos, varias condiciones, varios órdenes de clasificación, varias combinaciones, …).
Tenga en cuenta que, como se muestra en mi ejemplo, la llamada a join () debe estar separada y no puede ser "encadenada" (ese es el término técnico para tener múltiples llamadas a métodos en una fila) porque no devuelve el objeto de consulta sino el nombre del alias de la tabla.