2012-03-29 10 views
0

Ich habe zwei Tabellen Siteaddress und Jobsheet genannt. In der Tabelle Jobsheet befindet sich ein Feld mit der Bezeichnung siteaddress, das die ID der in der Tabelle Siteaddress gespeicherten Site-Adresse enthält.Verknüpfen Sie zwei Tabellen mit angegebenen Feldern in CakePHP

Das Problem, das ich habe, ist, dass, während ich die in der Steuerung verbinden mache, schließt sich CakePHP die Siteaddress Tabelle in die Jobsheet Tabelle mit den id Felder in beiden Tabellen. Dies führt zu einem Problem, da es bisher nur einen Datensatz in der Tabelle Siteaddress und mehrere Datensätze in der Tabelle Jobsheet gibt.

Was ich tun muss, ist CakePHP zu sagen Jobsheet.siteaddress zu Siteaddress.id anstelle der Art, wie es im Moment funktioniert.

Wie kann ich das tun?

Unten sind die Beziehung Code aus der Jobsheet Modelldatei:

public $hasOne = array(
    'Company' => array(
     'className' => 'Company', 
     'foreignKey' => 'id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ), 
    'Siteaddress' => array(
     'className' => 'Siteaddress', 
     'foreignKey' => 'id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ) 
); 

Prost!

Antwort

1

Sie haben die foreignKey auf id gesetzt, damit Cake dies für die Verbindung verwendet. Dieser Schlüssel kann auf ein beliebiges Tabellenfeld in der Tabelle gesetzt werden, die Sie verbinden möchten. Wenn ich Sie richtig verstehen, sollten Sie setzen die foreignKey-siteaddress:

'Siteaddress' => array(
    'className' => 'Siteaddress', 
    'foreignKey' => 'siteaddress', 
    'conditions' => '', 
    'fields' => '', 
    'order' => '' 
) 

Siehe the manual entry für hasOne auch.

EDIT:

In diesem Fall $belongsTo könnte eine bessere Passform als Verein sein.

+0

Ich habe es auf 'siteaddress' gesetzt, aber es kommt dann mit dem Fehler zurück:' Spalte nicht gefunden: 1054 Unbekannte Spalte 'Siteaddress.siteadresse' in 'on clause'' – mickburkejnr

+1

Ah, Sie haben Recht. In diesem Fall ist 'hasOne' möglicherweise nicht die gesuchte Assoziation. Das Definieren einer '$ belongTo'-Verknüpfung mit der' siteaddress' 'foreignKey' könnte eine bessere Option sein. – mensch

+0

Die Verwendung von '$ belongTo' hat funktioniert. Danke vielmals! – mickburkejnr

Verwandte Themen