2 Stimmen

Modelle mit zwei hasOne-Beziehungen zu derselben Tabelle

Ich baue eine MMA (mixed martial arts) Website mit CakePHP. Ich habe eine fights Tabelle in meiner Datenbank, die in ihrer einfachsten Form drei Spalten hat: id , fighter_a und fighter_b .

Ich habe Schwierigkeiten, mir vorzustellen, welche Art von Beziehung mein Fight Modell hätte mit meinem Fighter Modul. Liege ich richtig in der Annahme fighter_a et fighter_b wären zwei hasOne Beziehungen?

Ich habe dies mit dem Folgenden in meinem Fight modelo:

<?php
class Fight extends AppModel {

    public $name = 'Fight';
    public $hasOne = array(
        'FighterA' => array(
            'className' => 'Fighter',
            'foreignKey' => 'fighter_a'
        ),
        'FighterB' => array(
            'className' => 'Fighter',
            'foreignKey' => 'fighter_b'
        )
    );
}

Und dann dies in meinem Fighter modelo:

<?php
class Fighter extends AppModel {

    public $name = 'Fighter';
    public $hasMany = array(
        'Fight'
    );
}

Aber dies warf einen Fehler in meiner CakePHP-Anwendung beim Aufruf $this->Fight->findById($id) (wobei $id war die ID eines Kämpfers):

Fehler: SQLSTATE[42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte 'Fight.fighter_id' in 'field list'

Wie kann ich meine Modelle so verknüpfen, dass ich alle Kämpfe, die ein Kämpfer bestritten hat, aufrufen kann?

1voto

Joep Punkte 636

Die Lösung, die sich aus dem Gespräch über die Frage ergibt, wäre folgende:

Schreiben Sie das $hasMany in Ihrem FighterModel so um, dass es wie folgt aussieht:

   public $hasMany = array(
      'Fight' => array(
         'className' => 'Fight',
         'finderQuery' => 'SELECT * FROM fights AS Fight WHERE Fight.fighter_a_id = {$__cakeID__$} OR Fight.fighter_b_id = {$__cakeID__$};'
      )
   );

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X