Сложный запрос в CakePHP - PullRequest
1 голос
/ 12 июля 2011

Мне было интересно, могли бы вы, ребята, помочь со сложным запросом.
У меня есть три заметки.

Пользователи, вакансии и комментарии.

Задания назначаются пользователям, но любой пользователь может оставить комментарий к работе.
В настоящий момент, после выпечки традиционным способом, в представлении View Job внизу отображаются соответствующие комментарии. Тем не менее, таблица комментариев показывает числовое значение user_id, тогда как я хочу, чтобы оно отображало «имя пользователя», которое соответствует указанному user_id.

В представлении View Job у меня есть этот массив с соответствующими ключами:

$job;
$job['Users'];
$job['Comments'];
$job['Job'];

А вот мой вывод отладки массива $job.

Array
(
    [Job] => Array
        (
            [id] => 1
            [user_id] => 1
            [title] => New Job
            [body] => adsljbfalwsjbflkjb
            [deadline] => 2011-07-15
            [completed] => 0
        )

    [User] => Array
        (
            [id] => 1
            [username] => dan
            [password] => 2fd27a6319ef3faf9ed55b59830d786b5ed890be
        )

    [Comment] => Array
        (
            [0] => Array
                (
                    [id] => 3
                    [job_id] => 1
                    [user_id] => 2
                    [hours] => 6
                    [body] => Comment from Phil
                    [date] => 2011-07-12
                )

            [1] => Array
                (
                    [id] => 2
                    [job_id] => 1
                    [user_id] => 1
                    [hours] => 2
                    [body] => This is a Comment from the 9th
                    [date] => 2011-07-09
                )

        )

)

Могу ли я что-то сделать с этим, что позволило бы мне отображать имя пользователя, а не user_id? Я изменяю модель? Контроллер?
Я довольно новичок в CakePHP и, хотя я понял основы, я борюсь с более сложными запросами, подобными этим.

Вот мой файл просмотра, который я хочу изменить:

<div class="related">
    <h3><?php __('Comments'); ?></h3>
    <?php if (!empty($job['Comment'])): ?>
        <table cellpadding = "0" cellspacing = "0">
            <tr>
                <th><?php __('User'); ?></th>
                <th><?php __('Date'); ?></th>
                <th><?php __('Hours'); ?></th>
                <th><?php __('Body'); ?></th>
                <th class="actions"><?php __('Actions'); ?></th>
            </tr>
            <?php
            $i = 0;
            foreach ($job['Comment'] as $comment):
                $class = null;
                if ($i++ % 2 == 0) {
                    $class = ' class="altrow"';
                }
                ?>
                <tr<?php echo $class; ?>>
                    <td><?php echo $comment['user_id']; ?></td> // NEEDS TO BE USERNAME NOT USER ID
                    <td><?php echo $comment['date']; ?></td>
                    <td><?php echo $comment['hours']; ?></td>
                    <td><?php echo $comment['body']; ?></td>                   
                    <td class="actions">
                        <?php echo $this->Html->link(__('View', true), array('controller' => 'comments', 'action' => 'view', $comment['id'])); ?>
                        <?php echo $this->Html->link(__('Edit', true), array('controller' => 'comments', 'action' => 'edit', $comment['id'])); ?>
                        <?php echo $this->Html->link(__('Delete', true), array('controller' => 'comments', 'action' => 'delete', $comment['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $comment['id'])); ?>
                    </td>
                </tr>
            <?php endforeach; ?>+
        </table>
    <?php endif; ?>

</div>

Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 12 июля 2011

Я решил ту же проблему, выполнив поиск ('список') для модели, из которой вы хотите получить имена.

В вашем случае вы хотели бы найти Users-> find ('list') и назначить его переменной в вашем контроллере, а затем в вашем представлении, где отображается идентификатор, добавить эту новую переменную поверх идентификатора.

например, изменить $ job ['Comment'] ['user_id'] на $ users [$ job ['Comment'] ['user_id']]

0 голосов
/ 12 июля 2011

Вы, вероятно, забыли установить атрибут de displayField в вашей User модели.

class User extends AppModel { var $displayField = 'username';}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...