Home
NexoPOS

Relazione tra tabelle

Quando crei un componente CRUD su NexoPOS, puoi stabilire una relazione con tabelle esistenti per estrarre dati da esse contemporaneamente.

In un esempio concreto, se crei un CRUD per i libri, potresti voler assegnare l’autore (nel nostro caso, la persona che ha inserito la voce, non l’autore del libro) oppure assegnarlo a una categoria. Puoi configurare le varie relazioni dalla tua classe CRUD: Inner Join, Left Join o Right Join. L’impatto sulla visualizzazione dipende esclusivamente dal tipo di relazione che scegli.

Join interno

In questo esempio, come per qualsiasi strategia di inner join di database, entrambe le risorse devono esistere per ottenere un risultato. Potrebbe essere utile mostrare libri che hanno un autore o una categoria che esistono effettivamente.

<?php
namespace Modules\YourModule\Crud;

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

Qui definiamo una relazione di Inner Join. Assegneremo gli utenti esistenti all’autore del libro. Se l’utente non esiste (oppure è stato eliminato), il libro non verrà elencato.

Left Join

In alternativa, potresti voler dare priorità a una delle due tabelle. Con il Left Join, la priorità viene data alla tabella impostata nella parte sinistra della relazione. Ciò significa che, se l’elemento nella parte destra non esiste, il valore sarà null e verrà comunque restituito un risultato.

<?php
namespace Modules\YourModule\Crud;

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

Con questo approccio, abbiamo creato una query di left join sulla tabella degli utenti. Se gli utenti non esistono, avremo comunque una voce per il libro. Tuttavia, tutte le informazioni relative all’utente verranno impostate su null.

Giunzione destra

Il metodo Right Join è l’opposto del Left Join. Nel nostro esempio, invece di dare priorità alla tabella dei libri, daremo ora priorità alla tabella dell’utente. Ciò significa che se il libro manca (oppure è stato eliminato), ci sarà comunque una voce.

<?php
namespace Modules\YourModule\Crud;

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