Drupal 8 - Entitée & Views - Créer une relations inverse

Posté le Jeudi 22 mars 2018 - 17:35
Dernière mise à jour le Vendredi 23 mars 2018 - 07:49

Prenons deux types d'entités custom : « Bière » et « Brasserie » avec une relation 1-n entre les deux dans le sens :

  • Une bière provient d'une et d'une seule brasserie
  • Une brasserie peut proposer N bières

 Ainsi :

drupal-views-relations.png

En drupalisme, on aurait une propriété « entity_reference » au niveau de notre bière qui fera référence à la brasserie.

Dans views, si on fait un listing des bières, pas de soucis pour accéder au contenu de la brasserie depuis la bière, par contre l'inverse n'est pas possible.

Depuis un listing de brasserie, il n'est pas possible d’accéder aux bières de la brasserie.

Pour cela il faut utiliser la classe en charge de views_data, définie dans l'annotation de notre type d'entité brasserie :

drupal-entitee-annotation.png

Et voila le contenu de ce fichier

  1. <?php
  2.  
  3. namespace Drupal\mon_module\Entity\ViewsData;
  4.  
  5. use Drupal\views\EntityViewsData;
  6.  
  7. class BrasserieViewsData extends EntityViewsData {
  8.  
  9. /**
  10.   * {@inheritdoc}
  11.   */
  12. public function getViewsData() {
  13. $data = parent::getViewsData();
  14. $data['brasserie']['bieres'] = [
  15. 'title' => t('Bieres'),
  16. 'help' => t('Lie la brasserie aux bières produites'),
  17. 'relationship' => [
  18. 'group' => t('bieres'), // Affiché en information dans la partie « relationship » de views
  19. 'label' => t('Actions de formation'), // Affiché en information dans la partie « relationship » de views
  20. 'base' => 'biere', // Table de base de l'entitée cible
  21. 'field table' => 'biere', // Table contenant le champ de l'entitée cible sur lequel on fera la jointure
  22. 'base field' => 'brasserie',// Champ de l'entité cible Champ sur lequel on fera la jointure
  23. 'relationship field' => 'brasserie_id', // Champ de l'entité source sur lequel on fera la jointure
  24. 'id' => 'standard',
  25. ],
  26. ];
  27. return $data;
  28. }
  29. }

Et voila le travail !

views-relationship.png

 

Ajouter un commentaire

Ne sera pas publié

HTML restreint

  • Balises HTML autorisées : <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et les adresses courriel se transforment en liens automatiquement.
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...