CakePHP显示除ID之外的其他属性

时间:2014-12-17 20:29:30

标签: cakephp cakephp-2.3 cakephp-appmodel

我遇到CakePHP的问题,显示名称而不是表的外键。

设置:3桌:玩家,团队,游戏
3个型号
团队:
public $hasMany = 'Player';

玩家:
    public $belongsTo = 'Team';
游戏:
public $belongsTo = array( 'HTeam' => array( 'className' => 'Team', 'foreignKey' => 'hteam' ), 'ATeam' => array( 'className' => 'Team', 'foreignKey' => 'ateam' )

我认为Model的一切都很好,因为ID正确显示,我可以添加,删除等等。所以一切正常。唯一不起作用的是显示团队的名称,而不是团队的ID。 在玩家表中,team_id是外键。当我想列出所有玩家时,那里只出现team_id而不是带有团队链接的名称。我尝试过很多东西但是我没有成功。当我列出所有游戏时,我遇到同样的问题。

我尝试在团队模型中设置$displayField = 'name',但我不知道如何在视图中调用名称,该视图由Userscontroller控制。

PlayersController:
$this->set('players', $this->Player->find('all')); $teams = $this->Team->find('list', array('fields' => array('name'))); $this->set('teams', $teams);
也试过这个:
$teams = $this->Player->Team->find('list', array('fields' => array('name')));

这是我试图显示名称的代码:
    <?php echo $this->Html->link($teams['Team']['name'], array('controller' => 'teams', 'action' => 'view', $teams['Team']['id'])); ?>

但这不起作用,因为我没有team_id。 我认为这个问题之前已经得到了回答,但我要么愚蠢地找到它,要么愚蠢地正确地实现它......

谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

CakePHP的find('list') doesn't return arrays that are structured the same as find('all').

设置$ teams后,它应该包含

array(
    1 => 'Team 1 Name', 
    2 => 'Team 2 Name',
    ...
)

无论您使用哪种方法设置它。因此,尝试查找$teams['Team']['name']将无法正常工作,因为数组的结构不是这样的。

以下是您应该用于输出每个团队链接的实际循环:

<ul>
    <?php foreach ($teams as $team_id => $team_name): ?>
        <li>
            <?php echo $this->Html->link(
                $team_name, 
                array(
                    'controller' => 'teams', 
                    'action' => 'view', 
                    $team_id
                )
            ); ?>
        </li>
    <?php endforeach; ?>
</ul>

答案 1 :(得分:0)

感谢Phanton Watsons的帮助。解决方案太简单了:(

在控制器中找到('all') 在视图中它是$ player [Team] [name]。

很抱歉打扰了社区。我不知道为什么我之前没有找到解决方案..