Nano Hash - криптовалюты, майнинг, программирование

доктрина 2 многие ко многим (Товары - Категории)

Привет, у меня есть отношение «многие ко многим» между элементами (продуктами) и категориями, и я реализовал эти три объекта:

  1. Сущность предмета:

       /**
     * @Entity 
     * @Table(name="items")
     */
    use Doctrine\Common\Collections\ArrayCollection;
    
    class Item {
    
        /**
         *
         * @Id  @Column(type="integer")
         * @GeneratedValue
         */
        private $id_item;
    
         /** @OneToMany(targetEntity="ItemCategories", mappedBy="item") */
        protected $categories;
    
        public function __construct() {
    
            $this->categories=new ArrayCollection();
        }
    
        public function addCategory(ItemCategories $category){
            $this->categories->add($category);
        }
        public function getCategories(){
            return $this->categories;
        }
    
    }
    

    2 Соединить таблицу (ItemCategories)

         /**
         * @Entity 
         * @Table(name="item_categories")
         */
        class ItemCategories {
    
            /**
             *
             * @Id  @Column(type="integer")
             * @GeneratedValue
             */
            private $id;
    
            /**
             * @Column(type="integer")
             */
            private $id_item;
    
            /**
             * @Column(type="integer")
             */
            private $id_category;
    
            /** @ManyToOne(targetEntity="Category", inversedBy="ItemCategories")
             *  @JoinColumn(name="id_category", referencedColumnName="id_category")
             *  */
            protected $category;
    
            /** @ManyToOne(targetEntity="Item", inversedBy="$categories")
              *  @JoinColumn(name="id_item", referencedColumnName="id_item")
             *  */
            protected $item;
    
            public function getCategory() {
                return $this->category;
            }
    
            public function setCategory($category) {
                $this->category = $category;
            }
    
            public function getItem() {
                return $this->item;
            }
    
            public function setItem($item) {
                $this->item = $item;
            }
    
    
    
        }
    

    3. Таблица категорий

     /**
     * @Entity 
     * @Table(name="categories")
     */
    class Category {
    
        /**
         *
         * @Id  @Column(type="integer")
         * @GeneratedValue
         */
        private $id_category;
    
        /** @OneToMany(targetEntity="ItemCategories", mappedBy="category") */
        protected $ItemCategories;
        /**
         *
         * @Column(type="string") @var string 
         */
    
    
    
    }
    

Теперь моя проблема в том, что я не знаю, как вставить элемент, используя СУЩЕСТВУЮЩИЕ категории. Я старался:

  $item= new Entity\Item();
  $itemCategoriesReferences=new Entity\ItemCategories();

   $productCategoriesReferences->setItem($product);

  //get existing category from db using PkId
   $itemCategoriesReferences->setCategory($CategoryModel->getCategory(1));
   $item->addCategory(itemCategoriesReferences);

Я знаю, что это не имеет особого смысла, но у меня нет другой идеи, поэтому, пожалуйста, помогите мне.

Спасибо

28.07.2013

Ответы:


1

Третий объект полезен только в том случае, если вы хотите установить некоторые свойства отношения между категорией и элементом. Например, элемент «принадлежит» к категории, элемент «предлагается» для добавления в категорию, элемент «ожидает» удаления из категории. Поскольку ваши ItemCategories не показывают никаких таких свойств, вам действительно лучше всего делать это так, как указано в руководстве. Подробнее об этом читайте здесь: http://docs.doctrine-project.org/en/latest/reference/association-mapping.html#many-to-many-bidirectional

04.08.2013
  • а как же эволюционность? 26.03.2014

  • 2

    Во-первых, вы должны переименовать ItemCategories на ItemCategory, поскольку экземпляр этого элемента является только связью между 1 элементом и 1 категорией.

    Тогда все просто:

    $item = new Item();
    $em->persist($item);
    $category = $em->getRepository('category')->find($id_category);
    
    $itemCategory =new ItemCategory();
    $itemCategory->setItem($item);
    $itemCategory->setCategory($category);
    
    $em->persist($itemCategory);
    
    26.03.2014
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..