使用Cake查找来自不同模型的数据

时间:2014-02-10 15:29:03

标签: cakephp

我是新蛋糕(并喜欢它),但我遇到了一个我似乎无法找到解决方案的问题。我很确定有一个明显的答案,所以如果我问一个愚蠢的问题我会提前做好准备。

好的,到此为止。

我正在尝试使用Cake PHP版本2构建一个简单的消息系统。

我目前有两个模型,一个处理用户(用于登录和退出),另一个处理消息。

在消息表中,我有以下列:

id | sender_id | recipient_id | subject | body

我的MessagesController.php内容如下:

class MessagesController extends AppController {
 public function recent_messages() {
    if (empty($this->request->params['requested'])) {
        throw new ForbiddenException();
    }
    return $this->Message->find(
        'all'
    );
 }    
}

我的视图位于我的元素中,因为它实际显示为导航栏中的下拉列表。以下是我的观点:

<?php
 $messages = $this->requestAction('/messages/recent_messages');
?>

<?php 
 foreach ($messages as $message): ?>
  <li> 
   <a href="#">
 <div> <strong>Username of sender goes Here</strong></div>
<div><?php echo $message['Message']['subject']; ?></div>
  </a> 
 </li>
 <li class="divider"></li>
<?php endforeach; ?>

我想要做的是能够使用sender_id获取邮件发件人的实际用户名。只是为了澄清sender_id值实际上是users表中用户的id(主键)。

最初我认为这可以通过设置关联来完成,但我不知道如何。

如果有人可以就此提出任何建议,我将非常感激。

2 个答案:

答案 0 :(得分:1)

我不明白你为什么使用$ this-&gt; requestAction

如果您的视图是recent_messages.ctp,那么您已经调用了recentMessages()。

然后,如果您设置了关系,那么您已经在检索所需的所有数据

$message['Sender']['username']

包含您要查找的信息。 (或$message['User']['username']这取决于你如何编写模型。)

如果没有阅读关于设置关系的Manual

简而言之,您在Message模型中所要做的就是

$belongsTo = array(
    'Sender' => array(
            'className' => 'User',
            'foreignKey' => 'sender_id'
        )
)

答案 1 :(得分:0)

进一步思考。

您似乎正在从视图中执行requestAction。我认为它只能从控制器完成,然后通过$ this-&gt; set('messages',$ message)命令将结果传递给视图。

如果我误解了你在做什么,那我很抱歉。