为什么即使HABTM关联到位,我也会收到“Not Associated”错误?

时间:2016-11-13 04:49:03

标签: php cakephp has-and-belongs-to-many

我正在为我的自行车马球联盟制作一些锦标赛得分软件。我们的目标是以一种每个人都有机会在重复比赛开始之前与其他球队比赛的方式来匹配球队。

在我的Match Entity类中,我有一个名为createMatches的函数,它应该可以找到所有团队和相关的匹配项。匹配和团队之间存在HABTM关系,并带有连接表。这种关系很好 - 我在几个控制器方法中选择了团队(包含匹配)和匹配(包含团队),通过表单保存了关联,等等。但即便如此,在这个实体函数中,我得到错误“团队与匹配无关。这可能是由使用自动表引起的吗?......”等等。谁能告诉我什么是错的?

这是有问题的方法。

public function createMatches($tournamentId) {
    $team = TableRegistry::get('Teams', ['contain' => ['Matches']]);
        $teams = $team->find('all', ['conditions' =>
                ['tournament_id' => $tournamentId],
                    'contain' =>
            ['Matches' =>
                ['fields' =>
                    ['Matches.id']
             ]]]);
    return $teams;
}

这是Match.php中的init函数:

public function initialize(array $config)
{
    parent::initialize($config);

    $this->table('matches');
    $this->displayField('id');
    $this->primaryKey('id');

    $this->addBehavior('Timestamp');

    $this->belongsTo('Rounds', [
        'foreignKey' => 'round_id',
        'joinType' => 'INNER',
        'className' => 'SwissRounds.Rounds'
    ]);
    $this->belongsToMany('Teams', [
        'foreignKey' => 'match_id',
        'targetForeignKey' => 'team_id',
        'joinTable' => 'matches_teams',
        'className' => 'SwissRounds.Teams'
    ]);
}

这是Team.php的init函数:

public function initialize(array $config)
{
    parent::initialize($config);

    $this->table('teams');
    $this->displayField('name');
    $this->primaryKey('id');

    $this->hasMany('Players', [
        'foreignKey' => 'team_id',
        'className' => 'SwissRounds.Players'
    ]);
    $this->belongsToMany('Matches', [
        'foreignKey' => 'team_id',
        'targetForeignKey' => 'match_id',
        'joinTable' => 'matches_teams',
        'className' => 'SwissRounds.Matches'
    ]);
}

我不相信我接触过这些功能 - 它们都是通过蛋糕烘烤产生的。

2 个答案:

答案 0 :(得分:0)

错误消息非常准确,但不具有描述性。它说团队与Matches没有联系。

好吧,我用最少的设置测试了这个,只有区别,我没有插件里面的表。并且没有检测到错误。所以,我很确定CakePHP由于某种原因无法在SwissRounds -plugin中找到你的表类。

答案 1 :(得分:0)

如果您的表位于SwissRounds插件中,则应使用插件符号表示关联:
$ this-> belongsToMany(' SwissRounds。团队',[。 ..
$ this-> belongsToMany(' SwissRounds。匹配',[ ...