首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多到多-多-多嵌入形式

多到多-多-多嵌入形式
EN

Stack Overflow用户
提问于 2011-08-19 13:33:28
回答 2查看 563关注 0票数 3

我有三个简单的表格(种族,裁判,运动员)列是id和名字。

还有另外两个表(race_judge和race_athlete),我通过嵌入式表单将竞赛与许多裁判联系起来,在前端应用程序中将竞赛连接到许多运动员;这两个表有一些额外的字段(比如竞赛记录和运动员竞赛编号),可以在嵌入式表格中填写。

现在,我想为最后一张表"race_judge_athlete“构建一个嵌入式表单,在这个表格中,每一个参加比赛的裁判都可以给参加比赛的每一个运动员投票,我想用一个表格来填写数字。

我将如何使用symfony+doctrine表单来完成这一任务?

Update:当我插入一个新的比赛(通过RaceForm)时,由于运动员和裁判模型之间的关系,在race_judge和race_athlete (如果从选择部件中选择)中自动添加了评判员和运动员,但这在race_judge_athlete上没有发生。

下面是schema.yml:

代码语言:javascript
复制
Race:
  columns:
    name: string(255)
Athlete:
  columns:
    name: string(255)
  relations:
    RaceAthlete:
      foreignAlias: RaceAthlete
      class: Race
      refClass: RaceAthlete
      local: athlete_id
      foreign: race_id 
Judge:
  columns:
    name: string(255)
  relations:
    RaceJudge:
      foreignAlias: RaceJudge
      class: Race
      refClass: RaceJudge
      local: judge_id
      foreign: race_id

RaceJudge:
  columns:
    race_id: integer
    judge_id: integer
    judge_notes: string
  relations:
    Race:
      class: Race
      local: race_id
    Judge:
      class: Judge
      local: judge_id
RaceAthlete:
  columns:
    race_id: integer
    athlete_id: integer
    athlete_number: integer
  relations:
    Race:
      class: Race
      local: race_id
    Athlete:
      class: Athlete
      local: athlete_id

RaceJudgeAthlete:
  columns:
    race_id: integer
    judge_id: integer
    athlete_id: integer
    score: double
  relations:
    Race:
      class: Race
      local: race_id
    Judge:
      class: Judge
      local: judge_id
    Athlete:
      class: Athlete
      local: athlete_id
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-22 14:31:56

我已经做了一个有效的快速黑客,但它是丑陋的地狱!我仍然在寻找一个干净的实现,但现在这样就行了。

在RaceForm.class.php中,我以这种方式重写了doSave函数:我获得了doSave在RaceForm中保存的RaceJudge和RaceAthlete集合,并手动创建了缺少的集合,删除了实际的RaceJudgeAthlete集合,并将手动创建的集合保存在已清空的RaceJudgeAthlete集合中。

以下是代码:

代码语言:javascript
复制
    protected function doSave($con = null)
    {
        $this->saveRaceJudgeList($con);
        $this->saveRaceAthleteList($con);

        parent::doSave($con);
        $this->saveRaceJudgeAthlete();
    }

    public function saveRaceJudgeAthlete()
    {
        $race = $this->getObject();
        $RaceJudgeAthlete_collection = new Doctrine_Collection('RaceJudgeAthlete');
        $i = 0;
        foreach ($race->RaceJudge as $judge)
        {
            foreach ($race->RaceAthlete as $athlete)
            {
                $RaceJudgeAthlete_collection[$i]->setRaceId($race->getId());
                $RaceJudgeAthlete_collection[$i]->setJudgeId($judge->judge_id);
                $RaceJudgeAthlete_collection[$i]->setAthleteId($athlete->athlete_id);

                $i++;
            }
        }

        $race->RaceJudgeAthlete->delete();
        $race->RaceJudgeAthlete = $RaceJudgeAthlete_collection;
        $race->RaceJudgeAthlete->save();
    }
票数 1
EN

Stack Overflow用户

发布于 2011-08-29 02:37:37

你试过这样做吗?我也有类似的案子,对我来说很管用。

代码语言:javascript
复制
Race:
  columns:
  name: string(255)

Athlete:
  columns:
    name: string(255)
  relations:
    Races:
      class: Race
      refClass: RaceAthlete
      foreignAlias: RaceAthleteList
      local: athlete_id
      foreign: race_id 

Judge:
  columns:
    name: string(255)
  relations:
    Races:
      class: Race
      refClass: RaceJudge
      foreignAlias: RaceJudgeList
      local: judge_id
      foreign: race_id

RaceJudge:
  columns:
    race_id: integer
    judge_id: integer
    judge_notes: string
  relations:
    Race:
      class: Race
      local: race_id
    Judge:
      class: Judge
      local: judge_id

RaceAthlete:
  columns:
    race_id: integer
    athlete_id: integer
    athlete_number: integer
  relations:
    Race:
      class: Race
      local: race_id
    Athlete:
      class: Athlete
      local: athlete_id

RaceJudgeAthlete:
  columns:
    race_id: integer
    judge_id: integer
    athlete_id: integer
    score: double
  relations:
    Race:
      local: race_id
      foreign: id
    Judge:
      local: judge_id
      foreign: id
    Athlete:
      local: athlete_id
      foreign: id

HTH

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7122347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档