我正在制作我的第一个CakePHP项目(除了我所做的所有教程......)。
我正在为田径运动的训练员和运动员建立一个网站。
现在在我的数据库中我有一个用户表,其中包含字段:id,username,firstname,lastname,email,password,...
然后我还有两个带有字段的表:
训练者: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 / trainers或域/ app /运动员时,我得到错误:
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]
如此短暂的再现:用户是训练师或运动员,我有一张用户桌,一张运动员桌和一张训练台。
运动员有一名训练师和一名训练师,训练师有很多运动员和许多计划......
问题出在于用户是训练师或的运动员......,我需要在模型中加入什么才能使其发挥作用?我希望我说得足够清楚:s
答案 0 :(得分:0)
您必须在$hasOne
模型中定义User
关联,因为您的athletes
和trainers
表包含外键。另请参阅http://book.cakephp.org/view/1039/Associations-Linking-Models-Together#hasOne-1041
答案 1 :(得分:0)
我不明白你在模型中对'schema'的使用。我认为你的外键是错的。所以我要说以下内容:
<?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
设置为“运动员”或“培训师”,您就可以了。