2010-10-16 50 views
0

我正在製作我的第一個CakePHP項目(除了我所做的所有教程...)。特殊的cakephp模型關係

我正在爲田徑運動中的教練和運動員製作一個網站。

現在在我的數據庫我有一個領域的用戶表:ID,用戶名,名字,姓氏,電子郵件,密碼,...

然後我還有其他2代表與字段:

培訓師:ID,TYPE_ID(衝刺,距離,投擲,...),user_id說明

運動員:ID,TYPE_ID(衝刺,距離,投擲,...),USER_ID,trainer_id

我的教練模型看起來像這

<?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' 
     ) 
    ); 
} 
?> 

我的運動員模型看起來像這樣

<?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' 
     ) 
    ); 
} 
?> 

我的用戶模型是目前這樣的

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

但顯然應該改變,因爲當我去域/應用/培訓師或域/ app/athletes我得到錯誤:

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] 

so short recapitula重刑:用戶不是教練就是運動員,我有一張用戶桌,一張運動員桌和一張教練桌。

一個運動員有一個教練和一個模式的教練有很多的運動員和許多模式...

問題在於用戶是一個教練運動員......,我該怎麼得把我的模型,使這項工作?我希望我做這個很清楚:■

回答

0

我不明白您在模型中使用「模式」的用法。我認爲你的外鍵是錯誤的。所以我會說:

<?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' 
     ) 
    ); 
} 
?> 

有一個用戶或者運動員或培訓師是一個不同的問題。但我不認爲你必須在你的模型中執行它。只需將用戶表中的字段type設置爲「運動員」或「教練」,即可。