0

我是新手CakePHP,只想在帖子视图中显示相关标签的列表。

我在网上搜索过,似乎没有任何效果。

这就是我目前所拥有的:

// PostController
public function view($id = null) {
    $this->set('tags', $this->Post->Tag->find('all', array('conditions' => array('PostTag.post_id' => $id))));

    if (!$id) {
        throw new NotFoundException(__('Invalid post'));
    }

    $post = $this->Post->findById($id);
    if (!$post) {
        throw new NotFoundException(__('Invalid post'));
    }
    $this->set('post', $post);
}

// Post's view.ctp
echo $this->Text->toList($tags);

这是我得到的错误:

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'PostTag.post_id' in 'where clause'

这应该很容易,但我完全被卡住了。

感谢任何能提供帮助的人!

4

2 回答 2

0

您的 Post 控制器中是否加载了 Tag 模型?简单地说:

$this->set('tags', $this->Tag->find('all', array('conditions' => array('Tag.post_id' => $id))));

于 2013-08-11T00:21:10.200 回答
0

最后!在这里找到另一个关于加入表格和一些实验的问题后,我开始工作了。

public function view($id = null) {
    $options = array(
        'joins' => array(
            array('table' => 'posts_tags',
                'alias' => 'PostTags',
                'type' => 'left',
                'conditions' => array(
                    'Post.id = PostTags.post_id'
                )
            ),
            array('table' => 'tags',
                'alias' => 'Tag',
                'type' => 'left',
                'conditions' => array(
                    'PostTags.tag_id = Tag.id'
                )
            )
        )
        ,'conditions' => array(
            'PostTags.post_id' => $id
        )
        ,'fields' => array(
            'Tag.title' // the name of the tag
        )
        ,'recursive' => -1
    );

    $tagsList = $this->Post->find('all', $options); 

    // added $result and foreach to ensure that all results would be printed
    $result = array();
    foreach ($tagsList as $tag):
        array_push($result, $tag['Tag']['title']);
    endforeach;

    $this->set('tags', $result);

    // ... rest of the call to find the post info
}

// Post's view.ctp
echo $this->Text->toList($tags);

在我添加 $result 之前,它只会打印出第一个关联。我使用了“回声 pr($tags);” 在我看来,发现我想要的结果嵌套在两个数组中。添加 foreach 后,它会在我的视图中正确列出所有分配的标签。

于 2013-08-11T22:34:47.823 回答