2011-01-07 6 views
0

Ich habe zwei Datenbanktabellen, Homes und Assets, mit einer HasMany-BelongsTo-Beziehung.Ist mein CakePHP BelongsTo Beziehung Erstellen von leeren Einträgen?

Bis vor kurzem gehörte jedes Asset zu einem Home. Dies ist in letzter Zeit komplexer geworden: Einige Assets gehören jetzt einem Makler oder einer Region statt einem Home.

Heute habe ich dutzende leere Einträge in meiner Homes-Tabelle gesehen. Es scheint fast sicher, dass sie das Ergebnis neuer Assets sind, die nicht mit einem Home verbunden sind.

Ist es wahrscheinlich, dass die BelongsTo Home-Beziehung im Asset-Modell die Erstellung dieser leeren Einträge erzwingt? (Oder gibt es einen anderen wahrscheinlichen Grund?) Wenn es die Beziehung ist, gibt es eine schnelle Möglichkeit, die Beziehung so zu ändern, dass die Generierung eines Vermögenswerts Hand in Hand mit dem Generieren eines neuen gehen kann, aber nicht muss Heimateintrag?

EDITED: Hier sind die aktuellen Beziehungen zwischen den Modellen:

Nutzungsart:

var $belongsTo = array(
    'Home' =>array('className' => 'Home', 'foreignKey' => 'home_num')); 

var $hasOne = array(
    'Landmark' =>array('className' => 'Landmark', 'foreignKey' => 'asset_num', 
       'dependent' => true)); 

Home:

var $hasOne = array('HighlightImage' => array(
    'className'  => 'Asset', 
    'conditions' => 'highlight_image = TRUE', 
    'order'   => '', 
    'foreignKey' => 'home_num', 
    'dependent'  => false, 
    'exclusive'  => false, 
    'finderQuery' => '')); 

var $hasMany = array('Assets' => array(
    'className'  => 'Asset', 
    'conditions' => '', 
    'order'   => '(Assets.title + 0) ASC', 
    'limit'   => '200', 
    'foreignKey' => 'home_num', 
    'dependent'  => false, 
    'exclusive'  => false, 
    'finderQuery' => '')); 

Zeichen:

var $belongsTo = array(
    'Assets' => array(
     'className' => 'Asset', 
     'foreignKey' => 'asset_num'), 
'Regions' =>array(
     'className' => 'Region', 
     'foreignKey' => 'region_num')); 

Region:

var $hasMany = array('Landmarks' => array(
    'className' => 'Landmark', 
    'foreignKey' => 'region_num')); 
+0

Sie haben falsche Beziehungen, geben Sie Ihre Beziehungscodes in den Beitrag ein. – Ish

+0

@Ish Kumar: mit den Modellbeziehungen bearbeitet. Ziemlich sicher, dass sie suboptimal sind - jede Hilfe, die Sie mir geben können, um den spezifischen Täter für mein Problem zu finden, würde sehr geschätzt werden! – thesunneversets

Antwort

0

Es klingt wie Sie haben, was als ARC-Beziehung kennen. Dies bedeutet, dass Sie eine Asset-Tabelle mit mehreren Beziehungen haben. Wie Sie oben beschrieben haben, scheint die Assets-Tabelle nun Daten zu enthalten, die zu 3 verschiedenen Tabellen gehören können: Homes, Realtors oder Regions. Meiner Erfahrung nach geht Kuchen nicht gut mit ARK-Beziehungen um.

Mein Rat ist, mehrere Asset-Tabellen zu erstellen:

home_assets 
realtor_assets 
region_assets 

Auf den ersten Blick können Sie denken, dies über töten ist. In Bezug auf die Einfachheit ist dies jedoch der beste Weg, dies zu tun.

Sie können eine einzelne Tabelle verwenden, aber es erfordert ein wenig mehr Arbeit. Wenn Sie wirklich eine einzelne Asset-Tabelle verwenden möchten, müssen Sie eine zusätzliche Spalte (Typ) hinzufügen, falls Sie dies noch nicht getan haben. Dann müssen Sie den Typ vor jedem Speichern zu dem Asset hinzufügen, je nachdem, was die Daten speichert: Home, Grundstücksmakler oder Region.

Wenn Sie ein Beispiel des Codes angeben, den Sie verwenden (für Home, Immobilienmakler und Region), wie es für Assets gilt, wäre es einfacher zu diagnostizieren. Ziehen Sie die Verwendung von pastebin.com in Betracht, da ich davon ausgehe, dass der Code ziemlich groß sein kann.

+0

Oh, die Beziehungen sind ein Chaos (zu meiner Verteidigung, eine Menge von ihnen waren vorhanden, bevor ich kam!) Die Assets Tabelle hat home_num, realtor_num und kiosk_num Felder - zwei von denen 0 für ein bestimmtes Asset - zu spezifizieren Eigentum. In einer völlig anderen Art, Dinge zu tun, hat jedes Asset auch HasOne "Landmark", das zu einer Region gehört (welche HasMany Landmarks).Vielleicht sollte ein Wahrzeichen einen Vorteil haben, und nicht umgekehrt? Die Aussicht, alles zu refaktorisieren, ist ziemlich einschüchternd. Ich werde die Frage in jedem Fall mit den Modellbeziehungen aktualisieren ... – thesunneversets