如何访问链接到博客帖子的标签列表?

时间:2010-10-05 11:57:04

标签: symfony1 doctrine

我正在使用symfony作为学习练习的博客引擎。

如何从博客文章的ID中获取标签列表? 这是数据库shema: alt text

我在模型中添加了以下内容:

public static function getTags($id)
{
  return Doctrine_Core::getTable('Tag')
    ->createQuery('t')
    ->select('t.name, t.slug')
    ->leftJoin('t.ContentTag ct')
    ->where('ct.content_id = ?', $id)
    ->orderBy('t.name ASC');

}

这里是schema.yml的一部分:

Content:
  connection: doctrine
  tableName: ec_content
  actAs:
    Sluggable:
      fields: [title]
      unique: true
      canUpdate: true
    Timestampable:
  columns:
    id:
      type: integer(4)
      fixed: false
      unsigned: true
      primary: true
      autoincrement: true
(...)
  relations:
    Comment:
      local: id
      foreign: content_id
      type: many
    ContentTag:
      local: id
      foreign: content_id
      type: many

ContentTag:
  connection: doctrine
  tableName: ec_content_tag
  columns:
    content_id:
      type: integer(4)
      fixed: false
      unsigned: true
      primary: true
      autoincrement: false
    tag_id:
      type: integer(4)
      fixed: false
      unsigned: true
      primary: true
      autoincrement: false
  relations:
    Content:
      local: content_id
      foreign: id
      type: one
    Tag:
      local: tag_id
      foreign: id
      type: one

1 个答案:

答案 0 :(得分:1)

如果没有确切地了解您的架构是如何定义的(即schema.yml),很难判断,但我猜这将是有效的,假设您已加载content对象:

$tags = $content->Tags;

否则,就我所知,您的代码段应该可以正常工作。您只需要在末尾粘贴->exec()以使其返回查询结果而不是查询对象本身:

return Doctrine_Core::getTable('Tag')
  ->createQuery('t')
  ->select('t.name, t.slug')
  ->leftJoin('t.ContentTag ct')
  ->where('ct.content_id = ?', $id)
  ->orderBy('t.name ASC')
  ->exec();

编辑看过您的架构后,您似乎还没有在内容和标签之间创建关系,您需要这样做。你可以让Doctrine处理他们的互动。 Symfony和Doctrine书使用与您的示例基本相同的内容来演示how to do a many-to-many relationship。 (请注意,虽然本文档是针对symfony的过时版本,但此功能的语法并未更改。)