gpt4 book ai didi

php - 使用 CakePHP 显示记录列表以连接到另一个表

转载 作者:可可西里 更新时间:2023-10-31 23:23:50 24 4
gpt4 key购买 nike

我有一个存储帖子和主题并使用 Topic_Posts 表连接它们的应用程序。

应用程序的关联如下:

Post.php
class Post extends AppModel
{
public $name = 'Post';

public $belongsTo = 'User';

public $hasMany = array('Answer');

// Has many topics that belong to topic post join table... jazz
public $hasAndBelongsToMany = array(
'Topic' => array('with' => 'TopicPost')
);
}

Topic.php
class Topic extends AppModel
{
public $hasMany = array(
'TopicPost'
);
}

TopicPost.php
class TopicPost extends AppModel {
public $belongsTo = array(
'Topic', 'Post'
);
}

当用户查看主题时,例如/topics/view/topicname 我想显示包含该主题的所有帖子。

到目前为止,我在我的 TopicsController View 中有以下方法:

public function view ( $slug )
{
$topic = $this->Topic->find('first', array('conditions'=>array('Topic.slug'=>$slug)));
$this->set('topic', $topic);
$this->set('title_for_layout', $topic['Topic']['title'] . ' – Topics');

$this->paginate = array
(
'Post' => array
(
'limit'=>15,
'conditions'=>array
(
'Post.status'=>array(1,2),
'TopicPost.topic_id' => $topic['Topic']['id'],
),
'order'=>array('Post.datetime'=>'desc'),
'contain'=>array('User'=>'Profile', 'TopicPost')
)
);

$posts = $this->paginate('Post'); // this one

$this->set('posts', $posts);

为了可以使用我添加的 Posts 和 TopicPosts:public $uses = array('Topic','TopicPost','Post'); 到 Controller 的顶部并制作所有模型都可容纳。

所以基本上我需要在数据库模型 TopicPosts 中找到与我正在查看的主题的 ID 匹配的帖子。

最佳答案

我只是无法让它以“正确”的方式工作。我不确定这是蛋糕上的错误还是什么,但是分页功能只是拒绝让步。执行此操作的正确方法可能是在您的 Post 模型中编写您自己的分页功能,有一些信息如何在食谱中做到这一点。

与此同时,我为您提供了以下解决方法。它不是最佳的(至少在没有缓存的情况下)但它有效。当/如果遇到性能问题时,您可以以正确的方式执行此操作,但在此之前,下面的代码应该可以执行此操作。

public function view ( $slug )
{
$topic = $this->Topic->find('first', array('conditions'=>array('Topic.slug'=>$slug)));
$this->set('topic', $topic);
$this->set('title_for_layout', $topic['Topic']['title'] . ' – Topics');

// step 1: get post IDs related to your topic
$postIDs = $this->Topic->TopicPost->find
(
'list',
array
(
'fields' => array('TopicPost.post_id'),
'conditions' => array('TopicPost.topic_id' => $topic['Topic']['id'])
)
);

$this->paginate = array
(
'Post' => array
(
'limit'=>15,
'conditions'=>array
(
'Post.status' => array(1,2),
// step 2: include them in your paginate conditions
'Post.id' => $postIDs,
),
'order' => array('Post.datetime'=>'desc'),
)
);

$posts = $this->paginate('Post');

$this->set('posts', $posts);
}

(请注意,我在测试中删除了一些内容,因为我在你的应用程序中没有一些内容,所以不要忘记将其放回去)

关于php - 使用 CakePHP 显示记录列表以连接到另一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10235800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com