【问题标题】:How to handle many-to-many relationship with OOPHP?如何处理与 OOPHP 的多对多关系?
【发布时间】:2011-01-14 06:13:15
【问题描述】:

在面向对象的 PHP 中处理多对多关系的最佳方式是什么?

如果我有三个表、书籍和类别以及连接表 bookscategories(处理多对多),我应该创建一个名为 bookcategories 的模型/类并在那里处理与书籍-类别关系有关的所有事情吗?

我对以下伪代码的具体问题是:

  1. 我是否将方法正确分配给了适当的类?
  2. 有没有更好的方法来实现这一点,而且不是很复杂?
  3. 在哪个类中处理链接关系?例如$book->link_to_cat('5')?
  4. 使用此方法的任何注意事项(如果适用)。

非常感谢任何建议!提前致谢!

伪代码:

<?php

class Books {
    //handles all book table stuff

    public function delete_book() {
        //deletes specific book
        //deletes all related bookcategories using find_by_book_id
    }
}

class Categories {
    // handles all category stuff
}

class BookCategories {

    public static function get_cats_by_book_id {
        // sql join statement to retrieve category objects by book id
    }

    public static function get_books_by_cat_id {

    }

    public static function find_by_book_id() {
        //returns bookcategories by book id.
    }
}


?>

【问题讨论】:

  • 就我个人而言,我会放弃 BookCategories 类——这是一个不必要的实现细节。只需在 book 类中添加 get_categories() 方法,在 category 类中添加 get_books() 方法即可。或者,在每个构造函数中添加代码,以便在创建类别/书籍对象时拉出所有链接的书籍/类别。
  • 为什么你的类名是复数?
  • @Sam - 即使 BookCategories 有其他属性,例如 BookCategory assign_date、assign_by_user 等,您是否会建议这样做?
  • @Marc - 是伪代码中的错误。感谢您的敏锐!
  • @Nick - 是的。就一本书而言,每个类别只有 1 个 assign_date、assign_by_user 等与之关联。当我想到对象时,一本书和一个类别很简单。 BookCategory 到底是什么?是否有过您会关心 BookCategory 的情况,除了与 BookCategory 或 Category 相关的情况?

标签: php oop


【解决方案1】:

您可能会发现研究设计模式很有帮助。在这种情况下经常使用复合模式。一本帮助您了解 php oo 设计模式的好书是 Matt Zandstra 的 PHP Objects, Patterns and Practice

【讨论】:

  • 谢谢 - 我昨天在查看了一些评论后购买了它。好建议!非常感谢!
猜你喜欢
  • 2011-02-09
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
  • 2018-02-17
  • 2021-01-28
  • 2020-10-09
  • 2018-09-17
  • 1970-01-01
相关资源
最近更新 更多