CakePHP协会问题

时间:2009-11-09 21:46:11

标签: cakephp

我正在创建一个小时间表应用程序。时间表有运动员,每个运动员都有个人分时(如跑步或赛车驾驶)

运动员拥有多个运行,一个运行属于运动员,运动员有一个运动员和许多时间表(反之亦然)。时间表包含多个运行,最后一个运行属于时间表。

当我在视图中添加新游戏时,除了选择框中的athlete_id之外,我无法获得任何内容。我真的很想换个名字。而不是

<?php echo $run['athlete_id'];?>,我已经尝试<?php echo $athlete['Athlete']['last_name'] ?>,但我似乎无法让它发挥作用。任何帮助将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:1)

如果不确切知道如何构建表单/数据,很难说,但我会怎么做。

在RunController中添加

$athletes = $this->Run->Athlete->find('list');
$this->set('athletes', $athletes);

然后在View中使用此表单帮助行。

<?php echo $form->input('Run.athlete_id', array('type' => 'select', 'options' => $athletes)); ?>

这应该有效,还有一种方法可以使用'compact'来使它更容易一些,但上面应该可以正常工作。

----开始编辑----

我做了一点研究,发现了紧凑的方法。

在RunController中使用

$athletes = $this->Run->Athlete->find('list');
$this->set(compact('athletes'));

然后在你的视图中使用

<?php echo $form->input('Run.athlete_id'); ?>

并且表单助手将自动找到压缩的Athlete数组并构建select。

----结束编辑----

希望这有帮助。

干杯, 迪安

答案 1 :(得分:0)

尝试打印$ run:print_r($ run)的内容,看看['运动员']是否存在。

如果没有,您可能必须在执行运行查询时手动包含Athlete模型: $这 - &GT;运行 - &GT;包含( '运动员');

答案 2 :(得分:0)

不要忘记使用Model类的displayField属性,即。

<?php
    class Athlete extends AppModel {
        public $name = "Athlete";
        public $displayField = "name"; // the field name that has the athletes name in it
    }
?>

http://book.cakephp.org/view/438/displayField