【问题标题】:special cakephp model relation特殊 cakephp 模型关系
【发布时间】:2010-10-16 11:15:56
【问题描述】:

我正在制作我的第一个 CakePHP 项目(除了我做过的所有教程......)。

我正在为田径运动的教练员和运动员创建一个网站。

现在在我的数据库中,我有一个包含以下字段的用户表:id、用户名、名字、姓氏、电子邮件、密码……

然后我还有另外 2 个包含字段的表:

trainers: id, type_id(sprint, distance, throwing, ...), user_id

运动员:id, type_id(sprint, distance, throwing, ...), 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');
}
?>

但这显然应该改变,因为当我转到 domain/app/trainers 或 domain/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]

如此简短的概括:用户要么是教练,要么是运动员,我有一个用户表、一个运动员表和一个教练表。

一名运动员有一名教练和一个模式 一名教练有许多运动员和许多模式...

问题在于用户是一名教练运动员......,我必须在我的模型中添加什么才能使这项工作发挥作用?我希望我说得足够清楚:s

【问题讨论】:

    标签: cakephp models


    【解决方案1】:

    您必须在 User 模型中定义 $hasOne 关联,因为您的 athletestrainers 表包含外键。另见http://book.cakephp.org/view/1039/Associations-Linking-Models-Together#hasOne-1041

    【讨论】:

      【解决方案2】:

      我不明白您在模型中对“模式”的使用。而且我认为你的外键是错误的。所以我想说的是:

      <?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 设置为“运动员”或“教练”,就可以了。

      【讨论】:

        猜你喜欢
        • 2013-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多