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 :
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 :
Et voila le contenu de ce fichier
<?php
namespace Drupal\mon_module\Entity\ViewsData;
use Drupal\views\EntityViewsData;
class BrasserieViewsData extends EntityViewsData {
/**
* {@inheritdoc}
*/
public function getViewsData() {
$data = parent::getViewsData();
$data['brasserie']['bieres'] = [
'title' => t('Bieres'),
'help' => t('Lie la brasserie aux bières produites'),
'relationship' => [
'group' => t('bieres'), // Affiché en information dans la partie « relationship » de views
'label' => t('Bières de la brasserie'), // Affiché en information dans la partie « relationship » de views
'base' => 'biere', // Table de base de l'entitée cible
'field table' => 'biere', // Table contenant le champ de l'entitée cible sur lequel on fera la jointure
'base field' => 'brasserie',// Champ de l'entité cible Champ sur lequel on fera la jointure
'relationship field' => 'brasserie_id', // Champ de l'entité source sur lequel on fera la jointure
'id' => 'standard',
],
];
return $data;
}
}
Et voila le travail !
Autre exemple ici sur mon module de pronostics : https://github.com/mespronos/mespronos/blob/8.x-2.x/src/Entity/ViewsData/GameViewsData.php
Commentaires
Bonjour,
merci pour cette présentation. Est ce que modifier le code est suffisant pour ensuite créer les view directement depuis l'interface utilisateur? Ou bien faut-il envisager de de tout faire par le code à partir de ce niveau de complexité?
Ajouter un commentaire