2010-10-16 9 views
0

Je fais mon premier projet CakePHP (mis à part tous les tutoriels que j'ai faits ...).relation spéciale modèle cakephp

Je crée un site pour les entraîneurs et les athlètes dans le sport d'athlétisme.

maintenant dans ma base de données je une table utilisateur avec des champs: id, nom d'utilisateur, prénom, nom, email, mot de passe ...

alors j'ai 2 autres tables avec les champs:

formateurs : id, type_id (sprint, distance, lancer, ...), user_id

athlètes: id, type_id (sprint, distance, lancer, ...), user_id, trainer_id

mon modèle formateur ressemble cette

<?php 
class Trainer extends AppModel { 
    var $name = 'Trainer'; 
    var $hasOne = array('User'); 
    var $hasMany = array(
     'Schema'=>array(
      'className'=>'Schema', 
      'foreighnKey'=>'trainer_id' 
     ), 
     'Athlete'=>array(
      'className'=>'Athlete', 
      'foreighnKey'=>'trainer_id' 
     ) 
    ); 
} 
?> 

mon modèle d'athlète ressemble à ceci

<?php 
class Athlete extends AppModel { 
    var $name = 'Athlete'; 
    var $hasOne = array('User'); 
    var $belongsTo = array(
     'Trainer'=>array(
      'className'=>'Trainer', 
      'foreighnKey'=>'trainer_id' 
     ), 
     'Schema'=>array(
      'className'=>'Schema', 
      'foreighnKey'=>'schema_id' 
     ) 
    ); 
} 
?> 

mon modèle utilisateur est actuellement comme celui-ci

<?php 
class User extends AppModel { 
    var $name = 'User'; 
    var $belongsTo = array('Usertype'); 
} 
?> 

mais cela ne doit évidemment changer, parce que quand je vais au domaine/app/formateurs ou domaine/app/athlètes Je reçois l'erreur:

Warning (512): SQL Error: 1054: Unknown column 'User.trainer_id' or 'User.athlete_id' in 'on clause' [CORE/cake/libs/model/datasources/dbo_source.php, line 681] 

si court recapitula tion: un utilisateur est un entraîneur ou un athlète, et j'ai une table des utilisateurs, une table des athlètes et une table des entraîneurs.

un athlète a un entraîneur et un schéma d'un entraîneur a beaucoup d'athlètes et de nombreux schémas ...

le problème est à un utilisateur d'être un entraîneur ou un athlète ..., qu'est-ce que je dois mettre dans mes modèles pour faire ce travail? J'espère que je fait ce assez clair: s

Répondre

0

Je ne comprends pas l'utilisation que vous faites du 'schéma' dans vos modèles. Et je pense que tes clés étrangères sont fausses. Donc, je dirais ce qui suit:

<?php 

// /models/trainer.php 
class Trainer extends AppModel { 
    var $name = 'Trainer'; 
    var $hasOne = array('User'); 
    var $hasMany = array(
     'Athlete'=>array(
      'className'=>'Athlete', 
      'foreignKey'=>'user_id' 
     ) 
    ); 
} 

// /models/trainer.php 
class Athlete extends AppModel { 
    var $name = 'Athlete'; 
    var $hasOne = array('User'); 
    var $belongsTo = array(
     'Trainer'=>array(
      'className'=>'Trainer', 
      'foreignKey'=>'user_id' 
     ) 
    ); 
} 
?> 

Le problème d'avoir un utilisateur soit athlète ou formateur est un autre. Mais je ne pense pas que vous deviez l'appliquer dans votre modèle. Il suffit d'avoir un champ type dans votre table utilisateur définie sur "athlète" OU "entraîneur" et tout ira bien.