Drupal 8 - Views - Ajouter une relation vers une entité de type custom

Posté le Vendredi 28 juillet 2017 - 16:38
Dernière mise à jour le Vendredi 26 janvier 2018 - 18:35

Contexte :

Un type d'entité custom "Carte" qui utilise come table de stockage "cards". Cette entité possède une propriété "owner" qui permet de la relier à l'utilisateur qui possède la carte. (propriété du type "entity_reference").

Dans une vue listant les cartes, on peut facilement créer une relation vers le "owner" pour accèder à ses informations.

Par contre sur une vue listant les utilisateurs, on ne peut pas avoir la relation inverse, liant les utilisateurs à leur carte. Pour cela il faut utiliser le hook_views_data_alter :

/**
 * Implements hook_views_data_alter().
 */
function MONMODULE_views_data_alter(array &$data) {
  $data['users_field_data']['cards'] = [
    'title' => t("Les cartes de l'utilisateur"),
    'help' => t("Permet de relier l'utilisateur courant à ses cartes"),
    'relationship' => [
      'group' => t('Cartes'),
      'label' => t("Cartes de l'utilisateur"),
      'base' => 'cards', // nom de la table stockant nos entités custom
      'base field' => 'owner', // nom du champ sur lequel faire la jointure
      'relationship field' => 'uid', // nom du champ cible sur lequel faire la jointure (de la table users_field_data)
      'id' => 'standard',
    ],
  ];
}

Merci à flocondetoile sur IRC pour m'avoir mis sur la bonne piste !

Aller plus loin ?

 

Commentaires

Sylvain

Posté le Vendredi 24 avril 2020 - 16:03

Bonjour Kevin,
je lis habituellement avec délectation et soulagement vos billets...
Nouveau bonheur que de trouver celui-ci !
J'ai utilisé le présent billet non pas pour ajouter une relation "inverse" comme décrit ici, mais pour ajouter une relation depuis une vue de votes (table votingapi_vote) vers une entité custom (ce que ne prévoit pas le module voting_api)... Ca fonctionne parfaitement :

$data['votingapi_vote']['my_custom_name'] = [
'title' => 'Custom entity name',
'help' => '',
'relationship' => [
'group' => 'Custom entity name',
'label' => 'Custom entity type',
'base' => 'custom entity table',
'base field' => 'id',
'relationship field' => 'entity_id',
'id' => 'standard',
],
];

merci encore

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...