2011-08-19 54 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,因爲我的架構 –