我遇到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。 我认为这个问题之前已经得到了回答,但我要么愚蠢地找到它,要么愚蠢地正确地实现它......
谢谢你的帮助!
答案 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]。
很抱歉打扰了社区。我不知道为什么我之前没有找到解决方案..