database – Seleccione campos de dos tablas usando db_select ()

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.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım