Question

J'ai deux tables de base de données, maisons et actifs, avec une relation hasMany-Appartient.

Jusqu'à récemment, tous les actifs appartenant à une maison. Cela est devenu récemment plus complexe. Maintenant certains actifs appartiennent à un agent immobilier ou d'une région au lieu d'une maison

Aujourd'hui, j'ai été voir des dizaines d'entrées vides qui apparaissent dans ma table Homes. Il semble presque certain qu'ils sont le résultat de nouveaux actifs, qui sont sans lien avec une maison, en cours d'enregistrement.

Est-il probable que la relation Appartient Accueil dans le modèle actif oblige la création de ces entrées vides? (Ou est-il une autre raison probable?) Si c'est la relation, est-il un moyen rapide de modifier la relation de sorte que la génération d'un actif peut, mais ne doit pas nécessairement avoir à, main dans la main avec la génération d'un nouveau entrée Home?

ÉDITÉ : Voici les relations actuelles entre les modèles:

Actif:

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

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

Accueil:

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'   => ''));

Point de repère:

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

Région:

var $hasMany = array('Landmarks' => array(
     'className' => 'Landmark',
     'foreignKey' => 'region_num'));
Était-ce utile?

La solution

Il semble que vous avez ce qui est connu comme une relation ARC. Cela signifie que vous ont une table d'actifs qui a des relations multiples. Comme vous le décrivez ci-dessus, il semble que maintenant le tableau des actifs contiendra des données qui peuvent appartenir à 3 tables différentes: Homes, agents immobiliers ou régions. Dans mon expérience, le gâteau ne gère pas les relations ARC très bien.

Mon conseil est de créer plusieurs tables d'actifs:

home_assets
realtor_assets
region_assets

À première vue, vous pouvez penser que c'est plus de tuer. Cependant, en termes de simplicité, c'est la meilleure façon de le faire.

Vous pouvez utiliser une seule table, mais il faut un peu plus de travail. Si vous voulez vraiment utiliser une seule table d'actifs, vous devrez ajouter une colonne supplémentaire (type) si vous avez pas déjà. Ensuite, vous devrez ajouter le type à l'actif avant chaque sauvegarde, en fonction de ce qui est l'enregistrement des données: maison, courtier immobilier ou d'une région.

Si vous fournissez un échantillon du code que vous utilisez (pour la maison, agent immobilier, et de la région) qu'elle applique aux actifs, il serait plus facile à diagnostiquer. Pensez à utiliser pastebin.com comme je suppose que l'ensemble de code peut être assez grand.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top