¿Cómo realizo uniones con modelos de litio?
-
29-10-2019 - |
Pregunta
Leí a través de Lithium Data Model Query, pero no vi ejemplos de uniones.
Solución
Hay múltiples formas de realizar una unión con el litio.
- Lithium manejará uniones para usted donde ha definido las relaciones (Ejemplos en el manual).
- Puede agregar uniones a un objeto de consulta existente usando el
join()
Método (ver elAPI)). - Puede pasar una variedad de objetos de consulta a los buscadores utilizando la clave
joins
. - Puede pasar el SQL directamente a una conexión usando
Connection->read()
.
Los otros métodos están razonablemente bien documentados, por lo que daré un ejemplo de objetos de consulta que pase a un buscador.
$fields = array('id', 'name', 'slug');
$joins = array();
$joins[] = new Query(array(
'source' => 'client_tests',
'constraint' => array('Test.id' => 'client_tests.test_id'),
));
$conditions['client_id'] = $this->data['client_id'];
$tests = Test::all(array(
'conditions' => $conditions,
'fields' => $fields,
'joins' => $joins
));
los source
es la mesa a la que quieres unir y constraint
es el criterio de unión. Litio aliasa la tabla de búsqueda al nombre del modelo, así que úselo en su restricción. Luego puede pasar las uniones a cualquier buscador junto con cualquier otro parámetro que desee.
Tenga en cuenta que al momento de escribir, se unen (y las relaciones) solo funcionarán con una base de datos relacional, no para cosas como DBREF de MongoDB.
Actualizar: Enlaces eliminados que han sido enlazados.
Otros consejos
Si configura una relación (usando Hasone, Hasmany o Pertaneto), puede obtener los datos relacionados suministrando un with
clave en las opciones de su find
llamar.
Como esto:
$categories = Categories::find('all', array(
'with' => 'Products'
));
Revisar la Capítulo manual sobre relaciones para más detalles.