Entity et Views : deux joins sur la même table

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

J'ai dans ma base drupal quatre tables issues d'une autre application. Je les ai intégrées comme des entités et je souhaite les afficher dans views mais je rencontre un problème avec les jointures.

Pour simplifier disons qu'il s'agit d'un schéma comme sur l'image jointe
(voir aussi
http://www.plantuml.com:80/plantuml/img/RSvH2e0W30RWzy7ku0KybDW2mJPJUuhk... )

J'ai dans MonModule le hook_entity_info suivant et les contrôleurs qui vont bien.
Dans views, l'entité film permet d'afficher pour un film, le nom des acteurs, cela fonctionne bien.
Mon problème : comment faire pour afficher aussi le nom des personnes de l'équipe ?

Merci pour votre aide.

<?php
function MonModule_entity_info(){                                             
 
$entities = array();
 
$entities['film'] = array(
   
'label'  => t('Film Entity'),
   
'base table' => 'C_film',
   
'entity class' => 'Entity',
   
'controller class' => 'EntityAPIController',                          
   
'views controller class' => 'EntityDefaultViewsController',           
   
'uri callback' => 'film_uri',                                        
   
'entity keys' => array( 'id' => 'fid'),
  );           
 
$entities['equipe'] = array(
   
'label'  => t('equipe Entity'),
   
'base table' => 'C_equipe',
   
'entity class' => 'Entity',
   
'controller class' => 'EntityAPIController',
   
'views controller class' => 'EquipeViewsController',
   
'uri callback' => 'equipe_uri',
   
'entity keys' => array( 'id' => 'eid'),
  );
 
$entities['acteur'] = array(
   
'label'  => t('acteur Entity'),
   
'base table' => 'C_acteur',
   
'entity class' => 'Entity',
   
'controller class' => 'EntityAPIController',
   
'views controller class' => 'acteurViewsController',
   
'uri callback' => 'acteur_uri',
   
'entity keys' => array( 'id' => 'aid'),
  );
 
$entities['personne'] = array(
   
'label'  => t('personne Entity'),
   
'base table' => 'C_personne',
   
'entity class' => 'Entity',
   
'controller class' => 'EntityAPIController',
   
'views controller class' => 'personneViewsController',
   
'uri callback' => 'personne_uri',
   
'entity keys' => array( 'id' => 'pid'),
  );
}

class
EquipeViewsController extends EntityDefaultViewsController {         
   public function
views_data() {                                          
    
$data = parent::views_data();                                         
    
$data['C_equipe']['table'] = array(                                  
            
'group' => t('C_equipe'),
            
'join' => array(                                              
              
'C_film' => array(
                
'left_field' => 'fid',                                
                
'field' => 'fid',                                     
               ),
             ),
     );                                                                     
     return
$data;                                                         
   }                                                                       
 }     
class
ActeurViewsController extends EntityDefaultViewsController {         
   public function
views_data() {                                          
    
$data = parent::views_data();                                         
    
$data['C_acteur']['table'] = array(                                  
            
'group' => t('C_acteur'),
            
'join' => array(                                              
              
'C_film' => array(
                
'left_field' => 'fid',                                
                
'field' => 'fid',                                     
               ),
             ),
     );                                                                     
     return
$data;                                                         
   }                                                                       
 }     
class
PersonneViewsController extends EntityDefaultViewsController {         
   public function
views_data() {                                          
    
$data = parent::views_data();                                         
    
$data['C_personne']['table'] = array(                                    
            
'group' => t('C_personne'),                                      
            
'join' => array(                                              
              
'C_film' => array(                                         
                
'left_table' => 'C_acteur',                              
                
'left_field' => 'pid',                                
                
'field' => 'pid',                                     
               ),                                                          
             ),                                                            
     );                                                                    
     return
$data;                                                         
   }                                                                       
 }     
?>
Fichier attachéTaille
Icône image schemaFilm.png8.56 Ko
Forum : 
Version de Drupal : 
Tags :