在Umbraco数据库中,内容存储在哪里?

8

我需要翻译一个关于 IT 技术的文本。其中涉及到一个 Umbraco 网站的数据库,我需要提取内容并加载到另一个 CMS 中。

我已经恢复了 SQL Server 数据库,但我仍然无法找到存储类似“博客文章”的内容在哪里。

我的目标是实现以下操作:

SELECT * 
FROM blogposts

谢谢

1个回答

10

很遗憾,事情并不会那么简单。在Umbraco中,几乎所有的东西都在umbracoNode表中有对应。

然后,您所有的自定义属性数据都将存储在这些表中:

Umbraco 7

  • cmsPropertyData
  • cmsPropertyType

Umbraco 8+

  • umbracoPropertyData
  • cmsPropertyType

我发现使用类似以下查询可以得到我想要的大部分内容:

SELECT TOP 1000 *
FROM cmsPropertyData pd
INNER JOIN cmsPropertyType pt
    ON pt.id = pd.propertytypeid
INNER JOIN umbracoNode n
    ON n.id = pd.contentNodeId
WHERE n.id = 1853

然而,您正在寻找特定文档类型的信息,因此您可能更像这样:

SELECT TOP 1000 *
FROM cmsPropertyData pd
INNER JOIN cmsPropertyType pt
    ON pt.id = pd.propertytypeid
INNER JOIN cmsContent c
    ON c.nodeId = pd.contentNodeId
INNER JOIN cmsContentType ct
    ON ct.nodeId = c.contentType
WHERE ct.alias = 'BlogPost'

然后,您可能会为每个博客文章节点的多个版本获取数据返回,因此您需要使用版本表cmsContentVersion进行更多的连接以获取最新数据。

版本数据存储在以下表中:

Umbraco 7:

  • cmsContentVersion

Umbraco 8+:

  • umbracoContentVersion

如果您正在使用Umbraco 7,则可以考虑尝试绕过一些数据库查询,并尝试使用已经存在的磁盘上的xml缓存。您可以在App_Data\umbraco.config中找到所有已发布内容的xml表示形式。您应该能够将其缩小到仅包含博客文章的xml表示形式。

我也在阅读这篇stackoverflow帖子,它说你可以通过文档类型导出包。你可以进入开发人员->包->已创建的包并右键创建。然后在包内容选项卡中,只需勾选博客文章文档类型即可。不确定这对你是否有用,因为我自己没有尝试过。看起来很有前途。

1
导出包提供一个包含相关数据的 XML 文件,您可以使用它将内容导入到另一个制造商的 CMS 中。 - Jan Bluemink
1
umbracoNode.nodeObjectType 是否被使用了?我在数据库中找不到其他 GUID 列... - Azimuth
umbracoNode表中存储的不仅仅是内容节点。还有一些其他的东西,比如数据类型。通过查看nodeObjectType字段,您可以确定您感兴趣的umbracoNode记录是文档类型、内容节点还是数据类型记录。 - bowserm
版本8是什么样子?这个例子不再起作用了。 - Pixel Hunter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接