gpt4 book ai didi

coldfusion - 在 Transfer ORM (Coldfusion) 中向多条连接添加属性

转载 作者:行者123 更新时间:2023-12-04 05:17:30 24 4
gpt4 key购买 nike

我正在使用传输,并且文章和视频之间存在多对多关系。我需要做的是在每个视频添加到文章时为其贴上时间戳。即我有两个表:

  • 文章(ID、标题、正文)
  • 视频(ID,网址)

  • 然后我有一个链接表:
  • article_videos(articleID, videoID)

  • 我需要在 article_videos 中添加一个额外的列时间戳:
  • article_videos(文章ID,视频ID,时间戳)

  • 我遇到的问题是,当我尝试在链接表中创建一个额外的属性时,它不起作用。

    我的传输 ORM 配置:
    <package name="article">
    <object name="Article" table="article">
    <id name="ID" type="numeric"/>
    <property name="Title" type="string" column="title"/>
    <property name="Body" type="string" column="body"/>

    <manytomany name="Videos" table="article_videos">
    <link to="article.Atricle" column="articleID"/>
    <link to="assets.Video" column="videoID"/>
    <collection type="array">
    <order property="OrderIndex" order="asc"/>
    </collection>
    <property name="TimeStamp" type="timestamp" column="timeStamp"/>
    </manytomany>
    </object>
    </package>

    <package name="assets">
    <object name="Video" table="video">
    <id name="ID" type="numeric"/>
    <property name="url" type="string" column="url"/>
    </object>
    </package>

    问题是 ManyToMany 中的新属性是不允许的,它会抛出一个错误,说 Transfer 配置格式错误。

    我应该在哪里以及如何添加时间戳,因为该视频可能会在多篇文章中使用,因此我应该记住该文章中该视频的时间戳需要?

    提前致谢。

    最佳答案

    您可能需要做的是为您的 article_videos 创建一个新对象。加入。

    因为 Transfer ORM 透明地处理多对多连接,所以如果您想在连接上添加和访问其他属性,您不会直接与连接表交互,您将需要创建一个新对象。有几种方法可以实现这一点。

    如果您仍然想透明地处理多对多关系并且时间戳将由数据库自动填充,您可以保持关系原样并添加一个表示 article_videos 的新对象。以及将该对象与文章和视频对象连接起来的新关系。

    因此,您将添加一个代表 article_videos 的新对象。 ,我可能还会向数据库添加代理键,或者您可能想要使用复合 ID:

    <object name="ArticleVideo" table="article_videos">
    <id name="ID" type="numeric"/>
    <property name="TimeStamp" type="timestamp" column="timeStamp"/>
    </object>

    然后你会更新你的 Article引用这个新对象的对象:
    <object name="Article" table="article">
    <id name="ID" type="numeric"/>
    <property name="Title" type="string" column="title"/>
    <property name="Body" type="string" column="body"/>

    <manytomany name="Videos" table="article_videos">
    <link to="article.Article" column="articleID"/>
    <link to="assets.Video" column="videoID"/>
    <collection type="array">
    <order property="OrderIndex" order="asc"/>
    </collection>
    </manytomany>

    <onetomany name="ArticleVideo">
    <link to="article.ArticleVideo" column="articleID"/>
    <collection type="array">
    <order property="TimeStamp" order="asc"/>
    </collection>
    </onetomany>
    </object>

    你也会更新你的 Video对象:
    <object name="Video" table="video">
    <id name="ID" type="numeric"/>
    <property name="url" type="string" column="url"/>

    <onetomany name="ArticleVideo">
    <link to="article.ArticleVideo" column="videoID"/>
    <collection type="array">
    <order property="TimeStamp" order="asc"/>
    </collection>
    </onetomany>
    </object>

    这样你就可以使用 ArticleVideo对象关系正常,但如果您需要访问其他属性:
    // Creating the join using the many-to-many relationship
    article = transfer.get("article.Article", 1);
    article.addVideo(video);

    然后,您还可以访问连接,如何获取将上述关系与连接相关联的信息可能需要一些工作,因此您可能必须预先决定您正在创建的连接是否需要更多信息:
    // Creating the join using the ArticleVideo object
    articleVideo = transfer.new("article.ArticleVideo");
    articleVideo.addParentArticle(article);
    articleVideo.addParentVideo(video);
    transfer.save(articleVideo);

    // Using a composite ID to access the ArticleVideo
    articleVideo = transfer.get("article.ArticleVideo", {
    "ArticleID" = 1,
    "VideoID" = 1
    });
    WriteOutput("The timestamp is: #articleVideo.getTimeStamp()#");

    否则,您可以调整所有关系,但这需要您在视频和文章之间使用中间对象。如果它只是一个时间戳,那么它可能是不必要的。

    关于coldfusion - 在 Transfer ORM (Coldfusion) 中向多条连接添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14081105/

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