CakePHP简单表关联帮助

CakePHP简单表关联帮助,cakephp,Cakephp,在cakephp中,我真的很难处理表关联,我只想将两个表关联在一起,但是一个表有两个外键指向另一个表 由于某些原因,我无法在home_id的字段选择表单中显示任何信息 请参阅下面的数据库图片和相关代码 我对cakephp真的很陌生,但我觉得如果我能做到这一点,它将非常有用-非常感谢任何帮助 }Cake不支持开箱即用的复杂FK,您可以定义与以下条件的关系 public $hasMany = array( 'TheRelation' => array( 'foreig

在cakephp中,我真的很难处理表关联,我只想将两个表关联在一起,但是一个表有两个外键指向另一个表

由于某些原因,我无法在home_id的字段选择表单中显示任何信息

请参阅下面的数据库图片和相关代码

我对cakephp真的很陌生,但我觉得如果我能做到这一点,它将非常有用-非常感谢任何帮助


}

Cake不支持开箱即用的复杂FK,您可以定义与以下条件的关系

public $hasMany = array(
    'TheRelation' => array(
        'foreignKey' => false,
        'conditions' => array(
            ... conditions ...
        )
    )
)

您必须为SafcTeam模型的每个关系使用别名:

var $belongsTo = array(

//relationship for your home_id fk
        'SafcHomeTeam' => array(
                'className' => 'SafcTeam',
                'foreignKey' => 'home_id'
        ),

 //relationship for your away_id key
            'SafcAwayTeam' => array(
                    'className' => 'SafcTeam',
                    'foreignKey' => 'away_id'
            )
    );
在相关的safc团队模型中:

var $hasMany = array(
        'SafcHomeTeam' => array(
                'className' => 'SafcEvent',
                'foreignKey' => 'home_id',
        ),
       'SafcAwayTeam' => array(
                'className' => 'SafcEvent',
                'foreignKey' => 'away_id',
        )
); 
在SafceEvents控制器的“添加和编辑”操作中添加以下内容:

//to respect cake conventions need the select list to be plural (Teams <--- with a s at the end)
    $safcHomeTeams = $this->SafcEvent->SafcHomeTeam->find('list');
$safcAwayTeams = $this->SafcEvent->SafcAwayTeam->find('list');
//为了遵守蛋糕惯例,选择列表必须是复数形式(Teams-SafcEvent->SafcHomeTeam->find('list');
$safcAwayTeams=$this->SafcEvent->safcAwayTeams->find('list');
//还要将这些列表传递给视图 $this->set(紧凑型('safcayteams','SafcHomeTeams')

在SafceEvent视图中添加并编辑

在表格部分:

//to respect cake convention to construct your select input properly 
//you need to refere to the list established in the controller ($SafcHomeTeams by using $SafcHomeTeam_id <--singular + "_" + "id")
        echo $this->Form->input('SafcAwayTeam_id'); 
        echo $this->Form->input('SafcHomeTeam_id');
//遵守cake约定,正确构造select输入
//您需要参考控制器中建立的列表($SafcHomeTeams,使用$SafcHomeTeam_id Form->input('safcayteam_id');
echo$this->Form->input('SafcHomeTeam_id');

太多的代码。你需要隔离问题,理想情况下发布一个最具代表性的示例。请关闭问题,因为它回答了你的教条式回答。请你能详细介绍一下你的示例吗。我真的是一个蛋糕初学者,我制作的代码仅仅来自数据库的设计和n针对它烘焙的模型和事件。这里有很多解释。比任何人都需要的更多。在我发布这篇文章之前,我已经阅读了那篇文章。看看代码,我相信我的关联是正确的。我甚至可以看到运行正确的SQL来生成值列表,但它们在我的表单中是不可选择的。如果it’这本来是小菜一碟,但尝试做一些我认为非常简单的事情却变得非常复杂和令人沮丧。嗨,guignol,你所发布的内容对我来说非常有意义,这也是我最初理解人际关系的方式。但即使回到这些方面,我也无法将下拉字段用于popul在活动表单中与团队一起吃饭。在我进行更改后,我还需要做些什么吗???如果编辑不理解,请发布控制器和视图的代码。谢谢guignol,我真的很感谢你的帮助-这几天让我发疯。我用一些屏幕截图展示了控制器、视图和模型它仍然没有做它应该做的。谢谢。如果需要,我可以上传代码和db。嗨,guignol,我在这里上传了文件…有两个文件1)safc_cake.sql.gz(数据库)和2)safc_cake.tar.gz(代码)。再次感谢你的帮助。
//to respect cake convention to construct your select input properly 
//you need to refere to the list established in the controller ($SafcHomeTeams by using $SafcHomeTeam_id <--singular + "_" + "id")
        echo $this->Form->input('SafcAwayTeam_id'); 
        echo $this->Form->input('SafcHomeTeam_id');