Relation entre tableaux
Lorsque vous créez un composant CRUD sur NexoPOS, vous pouvez établir une relation avec des tables existantes afin d’en extraire des données simultanément.
Dans un exemple concret, si vous créez un CRUD pour des livres, vous souhaiterez peut-être attribuer l’auteur (dans notre cas, la personne qui a effectué l’entrée, et non l’auteur du livre) ou l’associer à une catégorie. Vous pouvez configurer les différentes relations à partir de votre classe CRUD : Inner Join, Left Join ou Right Join. L’impact sur l’affichage dépend strictement du type de relation que vous choisissez.
Jointure interne
Dans cet exemple, comme avec toute stratégie de jointure interne de base de données, les deux ressources doivent exister pour produire un résultat. Il peut être pratique d’afficher des livres qui ont un auteur ou une catégorie qui existe réellement.
<?php
namespace Modules\YourModule\Crud;
class BookCrud extends CrudService
{
// ....
public $relations = [
[ 'nexopos_users as user', 'mymodule_books.author', '=', 'user.id' ]
];
// ....
}
Ici, nous définissons une relation de jointure interne. Nous allons attribuer les utilisateurs existants à l’auteur du livre. Si l’utilisateur n’existe pas (ou a été supprimé), le livre ne sera pas répertorié.
Jointure gauche
Sinon, vous pouvez donner la priorité à l’une ou l’autre des tables. Avec une jointure gauche (LEFT JOIN), la priorité est donnée à la table définie du côté gauche de la relation. Cela signifie que si l’entrée du côté droit n’existe pas, la valeur sera nulle et il y aura tout de même un résultat.
<?php
namespace Modules\YourModule\Crud;
class BookCrud extends CrudService
{
// ....
public $relations = [
'leftJoin' => [
[ 'nexopos_users as user', 'mymodule_books.author', '=', 'user.id' ]
]
];
// ....
}
Avec cette approche, nous avons créé une requête de jointure gauche sur la table des utilisateurs. Si les utilisateurs n’existent pas, nous aurons tout de même une entrée pour le livre. Toutefois, toutes les informations relatives à l’utilisateur seront définies sur null.
Jointure à droite
La méthode de jointure à droite (Right Join) est l’opposé de la jointure à gauche (Left Join). Dans notre exemple, au lieu de donner la priorité à la table des livres, nous donnerons désormais la priorité à la table des utilisateurs. Cela signifie que si le livre manque (ou a été supprimé), une entrée existera quand même.
<?php
namespace Modules\YourModule\Crud;
class BookCrud extends CrudService
{
// ....
public $relations = [
'rightJoin' => [
[ 'nexopos_users as user', 'mymodule_books.author', '=', 'user.id' ]
]
];
// ....
}