Как работать с отношениями "многие ко многим" с OOPHP?

Как лучше всего установить отношения «многие ко многим» в объектно-ориентированном 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.
    }
}


?>

person Nick    schedule 14.01.2011    source источник
comment
Лично я бы отказался от класса BookCategories - это ненужная деталь реализации. Просто добавьте метод get_categories() в класс книги и метод get_books() в класс категории. Или поместите код в каждый конструктор, чтобы вывести все связанные книги / категории при создании объекта категории / книги.   -  person Sam Dufel    schedule 14.01.2011
comment
Почему имена ваших классов во множественном числе?   -  person Marc-François    schedule 14.01.2011
comment
@Sam - вы бы порекомендовали это, даже если у BookCategories есть дополнительные свойства, такие как BookCategory assign_date, assign_by_user и т. Д.   -  person Nick    schedule 14.01.2011
comment
@Marc - ошибка в псевдокоде. Спасибо за понимание!   -  person Nick    schedule 14.01.2011
comment
@Nick - Да. Что касается Книги, с каждой категорией будет связано только 1 assign_date, assign_by_user и т. Д. Когда я думаю об объектах, книга и категория очевидны; что такое BookCategory? Была ли когда-нибудь ситуация, когда вам была бы важна категория BookCategory, кроме как связанной с книгой или категорией?   -  person Sam Dufel    schedule 14.01.2011
comment
@Sam - хорошо, отлично. Итак, если бы существовали значимые отношения, такие как ClassEnrollments (учащиеся ›- classenrollments -‹ классы), стоило бы иметь класс, или вы все же порекомендовали бы сохранить методы для отдельных классов?   -  person Nick    schedule 14.01.2011
comment
@Nick - Я не думаю, что вам когда-нибудь действительно понадобится создавать класс для таких отношений. Единственная причина, по которой вам нужно иметь отдельную таблицу для отношений типа one: many или many: many, - это необычность реляционных баз данных; существуют другие схемы хранения, в которых таблица отношений не существует.   -  person Sam Dufel    schedule 14.01.2011


Ответы (1)


Возможно, вам будет полезно изучить шаблоны проектирования. В этой ситуации часто используется составной узор. Хорошая книга, которая поможет вам с шаблонами проектирования с php oo, - это Объекты PHP, шаблоны и практика

person user466764    schedule 14.01.2011
comment
Спасибо - купил вчера, проверив несколько отзывов. Отличное предложение! Большое спасибо! - person Nick; 15.01.2011