Inicio
NexoPOS

Relación de tablas

Cuando creas un componente CRUD en NexoPOS, puedes establecer una relación con tablas existentes para extraer datos de ellas al mismo tiempo.

En un ejemplo concreto, si creas un CRUD para libros, es posible que quieras asignar el autor (en nuestro caso, la persona que hizo la entrada, no el autor del libro) o asignarlo a una categoría. Puedes configurar las distintas relaciones desde tu clase CRUD: Inner Join, Left Join o Right Join. El impacto en la visualización depende estrictamente del tipo de relación que elijas.

Unión interna

En este ejemplo, como con cualquier estrategia de inner join en una base de datos, ambos recursos deben existir para proporcionar un resultado. Podría ser conveniente mostrar libros que tengan un autor o una categoría que realmente exista.

<?php
namespace Modules\YourModule\Crud;

class BookCrud extends CrudService
{
    // ....
    public $relations   =   [
        [ 'nexopos_users as user', 'mymodule_books.author', '=', 'user.id' ]
    ];
    // ....
}

Aquí, estamos definiendo una relación de Inner Join. Asignaremos los usuarios existentes al autor del libro. Si el usuario no existe (o se ha eliminado), el libro no se mostrará.

Unión izquierda

Alternativamente, es posible que desee dar prioridad a una u otra tabla. Con un LEFT JOIN, la prioridad se otorga a la tabla establecida en la parte izquierda de la relación. Esto significa que si no existe la entrada en el lado derecho, el valor será nulo y se obtendrá un resultado.

<?php
namespace Modules\YourModule\Crud;

class BookCrud extends CrudService
{
    // ....
    public $relations   =   [
        'leftJoin' => [
            [ 'nexopos_users as user', 'mymodule_books.author', '=', 'user.id' ]
        ]
    ];
    // ....
}

Con este enfoque, hemos creado una consulta de left join en la tabla de usuarios. Si los usuarios no existen, aun así tendremos una entrada para el libro. Sin embargo, toda la información del usuario se establecerá en null.

Unión derecha

El método RIGHT JOIN es lo opuesto al LEFT JOIN. En nuestro ejemplo, en lugar de dar prioridad a la tabla de libros, ahora daremos prioridad a la tabla del usuario. Esto significa que si falta el libro (o se ha eliminado), aun así habrá una entrada.

<?php
namespace Modules\YourModule\Crud;

class BookCrud extends CrudService
{
    // ....
    public $relations   =   [
        'rightJoin' => [
            [ 'nexopos_users as user', 'mymodule_books.author', '=', 'user.id' ]
        ]
    ];
    // ....
}