2011-08-19 28 views
3

我有三个简单的表格(比赛,裁判,运动员),其中列是id和名称。多对多嵌入式表格

还有其他两个表(race_judge和race_athlete),我连一个比赛,许多法官和比赛,通过在Advanced Forms解释的形式嵌入在前端应用程序许多运动员;这两个表格有一些额外的字段(比如关于比赛和运动员比赛号码的裁判笔记),可以用嵌入的形式填写。

现在我想为最后一张表“race_judge_athlete”建立一个嵌入式表格,每位出席比赛的法官都可以为参加该比赛的每位运动员投票,并且我希望以单一形式填写数字。

我会如何使用symfony + doctrine表单?

更新:当我插入一个新的种族(通过RaceForm)裁判和运动员都在race_judge和race_athlete(如果从选择部件选择)由于在运动员和法官车型的关系自动添加,但是这并未”发生在race_judge_athlete上。


这里是的schema.yml:


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 

回答

1

我已经把一个快速黑客的作品,却是如同地狱中的丑陋! 我仍在寻找一个干净的实现,但现在这将做。

在RaceForm.class.php我重写DoSave就会功能是这样的: 我得到的只是在RaceForm保存由DoSave就会RaceJudge和RaceAthlete收藏和手动创建缺少的集合,删除实际RaceJudgeAthlete收集和保存手动创建一个在清空的RaceJudgeAthlete集合中。

下面是代码:



    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(); 
    } 

0

您是否尝试过这样的说法?我有类似的情况,它适用于我。

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

在您的模式,你只改变foreignAlias,这不工作:它仅更新RaceAthlete和RaceJudge,因为我的架构 –