CakePHP中的复杂查询

时间:2011-07-12 12:48:31

标签: php cakephp

我想知道你们是否可以帮助解决复杂的问题 我有三张桌子。

用户,工作和评论。

将作业分配给用户,但任何用户都可以对作业发表评论 目前,在烘焙传统方式后,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 个答案:

答案 0 :(得分:1)

我通过在要从中检索名称的模型上运行find('list')解决了同样的问题。

在您的情况下,您希望找到Users-&gt; find('list')并将其分配给控制器中的变量,然后在您的视图中,id显示您在id上添加新变量。

e.g。将$ job ['Comment'] ['user_id']更改为$ users [$ job ['Comment'] ['user_id']]

答案 1 :(得分:0)

您可能忘记在displayField模型上设置de User属性。

class User extends AppModel { var $displayField = 'username';}