2014-12-17 3 views
0

У меня проблема с CakePHP, отображающая имя вместо внешнего ключа таблицы.CakePHP показать другой атрибут, чем ID

Настройки: 3 Таблицы: Игроки, команды, Игры
В 3 Модели
Команды:
public $hasMany = 'Player';

Игроки:
public $belongsTo = 'Team';
Игры:
public $belongsTo = array( 'HTeam' => array( 'className' => 'Team', 'foreignKey' => 'hteam' ), 'ATeam' => array( 'className' => 'Team', 'foreignKey' => 'ateam' )

Я думаю, что все отлично с моделью, потому что идентификаторы отображаются правильно, и я могу добавить, удалить et c. Так что все работает нормально. Единственное, что не работает, - это показать имя, если команда вместо идентификатора команды. В таблице игроков есть командный_ид как внешний ключ. Когда я хочу перечислить всех игроков, тогда появляется только team_id, а не имя со ссылкой на команду. Я пробовал много вещей, но я не был успешным. У меня такая же проблема, когда я перечисляю все игры.

Я попытался установить $displayField = 'name' в Team Teams, но я не знаю, как назвать это имя в представлении, которое контролируется Usercontroller.

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. Я думаю, что на этот вопрос был дан ответ раньше, но либо я немой, чтобы найти его, либо неумно его реализовать правильно .....

Thx для вашей помощи!

+0

Пожалуйста, отформатируйте свой код ответа лучше, это беспорядок. – burzum

ответ

0

Спасибо за помощь Phanton Watsons'. Решение слишком легко :(

Он найти («все») в контроллере В представлении это $ игрок [Team] [имя].

Извините за беспокойство сообщества. Я надеваю» я знаю, почему я не нашел решение раньше ..

+0

Рад слышать, что вы нашли свое решение. Обязательно отметьте этот вопрос как _answered_. –

+0

Лучше отметить ответ, который уже был отправлен как правильный ответ вместо маркировки ваш собственный комментарий как правильный. Это больше соответствует тому, как работает сайт. –

0

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

После $ команды CakePHP имеет значение, оно должно содержать

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> 
+0

Спасибо за ответ. С помощью этого цикла я получаю сразу все имена и ссылки команд. То, что я хочу, это только команда игрока. Вот представление, которое я использую ' \t \t HTML-> ссылка ($ игрок [ 'Игрок'] [ 'PLAYER_NAME'], \t массив (» controller '=>' players ',' action '=>' player_detail ', $ player [' Player '] [' id '])); ?> \t 'После этой строки должно следовать имя команды со ссылкой. Thx заранее. – starstream

+0

Затем вам нужно добавить специфику к вашему вызову 'Team :: find()'. В этих условиях вам нужно будет добавить ''Team.id' => $ player ['Player'] ['team_id']'. Но если вы получаете только одну команду, вы можете также выполнить команду «Team :: find (« first »)' вместо 'Team :: find ('list')'. Вот [документация CakePHP о поиске()] (http://book.cakephp.org/2.0/ru/models/retrieving-your-data.html#find-list). –

+0

Извините, что я еще не ответил. Я думаю, что я должен быть более конкретным. Когда я использую find (сначала), я получаю только команду с идентификатором 1 (если в этой команде есть игроки). Ваше первое предложение составило список всех команд ... Но я хочу таблицу или что-то еще, что должно показать всех игроков (это легко найти (все)), а затем я хочу определенную команду игрока. Это означает, что я должен «следовать» идентификатору teamID в таблице Team. Думаю, я еще не понял эту концепцию. Я прочитал так много учебников и сообщений stackopverflow, но я не смог разработать решение. :( – starstream

Смежные вопросы