我正在使用symfony作为学习练习的博客引擎。
如何从博客文章的ID中获取标签列表? 这是数据库shema:
我在模型中添加了以下内容:
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
答案 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的过时版本,但此功能的语法并未更改。)