代码之家  ›  专栏  ›  技术社区  ›  Dan Passaro Andry

CakePHP每个关系多对多附加数据

  •  2
  • Dan Passaro Andry  · 技术社区  · 15 年前

    我对CakePHP比较陌生,我正在编写一个CakePHP应用程序,目前它有一个作者模型和一个书籍模型。作者和书都有多对多的关系。
    然而,我想另外,对于每一个作者与书的关系,都有一个相应的链接到该作者的博客,在那里他们反思自己写那本书的经历。

    如果这让人困惑,以下几段将试图详细说明我的情况:

    换句话说,对于每一对(作者、书籍),我希望能够存储一个相关的URL。

    在更为奇特的抽象数学术语中,我会使用可怕且不恰当的术语:我有一个无向图,其中每个顶点都是作者或一本书,每个边都有一个作者代表一个顶点,另一个顶点有一本书。这听起来有点令人困惑,但(我认为)它尽可能准确地描述了我的处境。
    根据上面的描述,我想知道是否可以将任意数据附加到该关系的任何给定边缘,并在以后检索它。

    目前我有第三个模型AuthorBook,它充当图形边缘。
    作者与AuthorBook有很多关系。
    这本书和AuthorBook有很多关系。
    AuthorBook与Author和Book有belongsTo关系,另外还有一个url字段。

    这个解决方案是可行的,但由于某种原因,这本书和作者并没有直接联系这一事实让我感到困扰。有没有什么方法可以达到同样的效果,同时又能将AuthorBook模型从图片中删除?

    (此外,我意识到我可以在保留AuthorBook的同时将它们直接关联起来,但这看起来既丑陋又多余。)

    (同时,我意识到我仍然会有一个author_book SQL表。这一点也不困扰我,我认为没有它是不可能的。)

    谢谢你抽出时间!请不要炒我的鱿鱼!!!

    1 回复  |  直到 15 年前
        1
  •  6
  •   deizel. user4815162342    15 年前

    是的,您可以对AuthorBook关系(或您设想的“边缘”)进行建模。

    class Author extends AppModel {
        ...
        $hasAndBelongsToMany = array('Book', array('with' => 'AuthorBook'));
        ....
    }
    

    " with “habtm选项:

    定义联接表的模型名称。默认情况下,CakePHP将自动为您创建模型。使用上面的例子,它将被称为 RecipesTag . 使用此键可以覆盖此默认名称。联接表模型可以像任何“常规”模型一样直接访问联接表。

    这相当于RoR的“ through ,在 this illustration