我有三个简单的表格(种族,裁判,运动员)列是id和名字。
还有另外两个表(race_judge和race_athlete),我通过嵌入式表单将竞赛与许多裁判联系起来,在前端应用程序中将竞赛连接到许多运动员;这两个表有一些额外的字段(比如竞赛记录和运动员竞赛编号),可以在嵌入式表格中填写。
现在,我想为最后一张表"race_judge_athlete“构建一个嵌入式表单,在这个表格中,每一个参加比赛的裁判都可以给参加比赛的每一个运动员投票,我想用一个表格来填写数字。
我将如何使用symfony+doctrine表单来完成这一任务?
Update:当我插入一个新的比赛(通过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发布于 2011-08-22 14:31:56
我已经做了一个有效的快速黑客,但它是丑陋的地狱!我仍然在寻找一个干净的实现,但现在这样就行了。
在RaceForm.class.php中,我以这种方式重写了doSave函数:我获得了doSave在RaceForm中保存的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();
}发布于 2011-08-29 02:37:37
你试过这样做吗?我也有类似的案子,对我来说很管用。
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: idHTH
https://stackoverflow.com/questions/7122347
复制相似问题