2016-11-13 2 views
0

Je fais un logiciel de notation de tournoi pour ma ligue de polo de vélo. Le but est de faire correspondre les équipes de manière à ce que tout le monde ait la chance de jouer avec toutes les autres équipes avant que les parties répétées ne commencent.Pourquoi une erreur "Non associé" est-elle détectée même si l'association HABTM est en place?

Dans ma classe Match Entity, j'ai une fonction appelée createMatches qui devrait trouver toutes les équipes et les correspondances associées. Il existe une relation HABTM entre les correspondances et les équipes, avec une table de jointure. Cette relation fonctionne correctement: j'ai sélectionné des équipes (contenir des correspondances) et des correspondances (contenir des équipes) dans plusieurs méthodes de contrôleur, des associations enregistrées à l'aide de formulaires, etc. Mais même ainsi, dans cette fonction Entité, j'obtiens l'erreur "Les équipes ne sont pas associées aux correspondances, cela pourrait-il être causé par l'utilisation de tables automatiques? ...." et ainsi de suite. Quelqu'un peut-il me dire ce qui ne va pas?

Voici la méthode en question.

public function createMatches($tournamentId) { 
    $team = TableRegistry::get('Teams', ['contain' => ['Matches']]); 
     $teams = $team->find('all', ['conditions' => 
       ['tournament_id' => $tournamentId], 
        'contain' => 
      ['Matches' => 
       ['fields' => 
        ['Matches.id'] 
      ]]]); 
    return $teams; 
} 

Voici la fonction init de Match.php:

public function initialize(array $config) 
{ 
    parent::initialize($config); 

    $this->table('matches'); 
    $this->displayField('id'); 
    $this->primaryKey('id'); 

    $this->addBehavior('Timestamp'); 

    $this->belongsTo('Rounds', [ 
     'foreignKey' => 'round_id', 
     'joinType' => 'INNER', 
     'className' => 'SwissRounds.Rounds' 
    ]); 
    $this->belongsToMany('Teams', [ 
     'foreignKey' => 'match_id', 
     'targetForeignKey' => 'team_id', 
     'joinTable' => 'matches_teams', 
     'className' => 'SwissRounds.Teams' 
    ]); 
} 

Voici la fonction init de Team.php:

public function initialize(array $config) 
{ 
    parent::initialize($config); 

    $this->table('teams'); 
    $this->displayField('name'); 
    $this->primaryKey('id'); 

    $this->hasMany('Players', [ 
     'foreignKey' => 'team_id', 
     'className' => 'SwissRounds.Players' 
    ]); 
    $this->belongsToMany('Matches', [ 
     'foreignKey' => 'team_id', 
     'targetForeignKey' => 'match_id', 
     'joinTable' => 'matches_teams', 
     'className' => 'SwissRounds.Matches' 
    ]); 
} 

Je ne crois pas que je l'ai touché l'une des ces fonctions - ils ont tous deux été générés par cake bake.

+2

Si le principal problème concerne les associations, il est une bonne idée d'inclure le code qui définit les association (s) – Dave

+1

juste assez -. édité. – Kluny

Répondre

0

Le message d'erreur est assez exact, mais pas descriptif. Il est dit que les équipes ne sont pas associées aux matchs. Eh bien, j'ai testé cela avec une configuration minimale, à la différence près que je n'avais pas mes tables dans les plugins. Et aucune erreur détectée. Donc, je suis assez sûr que CakePHP ne peux pas trouver vos classes de table à l'intérieur SwissRounds -plugin pour une raison quelconque.

0

Si vos tables sont dans un plug-in SwissRounds, vous devez utiliser la notation plug-in pour les associations:
$ this-> belongsToMany (». SwissRounds Teams, [... et
$ this-> belongsToMany (». SwissRounds correspondances, [...