Symfony Gedmo Tree

Gedmo Tree можно использовать, например, с проектами, субпродуктами и т. д. Но у меня есть ситуация, когда у меня есть таблица соединений между продуктами и категориями (ManytoMany).

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

Проблема, с которой я столкнулся, немного сложно объяснить. У меня есть представление со всеми категориями, в которых категория может иметь подкатегории.

  1. cat1 (показать товары)

    1.1 cat1-1 (показать товары)

    1.2 cat1-2 (показать товары)

Каждая категория, даже подкатегории, имеет ссылку, которая открывает новую страницу со всеми связанными с ними продуктами. Мне нужно найти способ отсортировать эти продукты по их категории, что я пытаюсь сделать с помощью Gedmo Tree.

См. Объект ниже, который является объектом подключения.

Проблема в том, что Gedmo не различает категорию, в которой вы находитесь. Он просто продолжает подсчет lft и rgt.

Надеюсь, я ясно описал свою проблему и у кого-нибудь есть решение.

Может быть, я мог бы использовать Gedmo treeRoot? Но не знаю, где можно использовать treeRoot для

<?php
/**
 * ProductCategory
 */
namespace XBS\AppBundle\Entity;

use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * ProductCategory
 * @ORM\Entity(repositoryClass = "AppBundle\Repository\ProductCategoryRepository")
 * @Gedmo\Tree(type = "nested")
 * ...
 */
class ProductCategory
{

    /**
     * @ORM\Id
     * @ORM\Column(name = "id", type = "integer")
     * @ORM\GeneratedValue(strategy = "AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity = "AppBundle\Entity\Product", inversedBy = "productCategories")
     * @Assert\NotNull()
     */
    protected $product;

    /**
     * @Gedmo\TreeParent
     * @ORM\ManyToOne(targetEntity = "AppBundle\Entity\Category", inversedBy = "productCategories")
     * @Assert\NotNull()
     */
    protected $category;

    /**
     * @Gedmo\TreeParent
     * @ORM\ManyToOne(targetEntity = "AppBundle\Entity\Category", inversedBy = "children" )
     * @ORM\JoinColumn(name = "parent_id", referencedColumnName = "id", onDelete = "CASCADE")
     */
    protected $parent;

    /**
     * @ORM\OneToMany(targetEntity = "AppBundle\Entity\Category", mappedBy = "parent")
     * @ORM\OrderBy({"lft" = "ASC"})
     */
    protected $children;

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * setProduct
     * 
     * @param null $product
     * @return $this
     */
    public function setProduct($product = null)
    {
        $this->product = $product;

        return $this;
    }


    /**
     * getProduct
     * @return mixed
     */
    public function getProduct()
    {
        return $this->product;
    }

    /**
     * setCategory
     * 
     * @param null $category
     * @return $this
     */
    public function setCategory($category = null)
    {
        $this->category = $category;

        return $this;
    }

    /**
     * getCategory
     * @return mixed
     */
    public function getCategory()
    {
        return $this->category;
    }

    /**
     *  @return String empty
     */
    public function __toString(){
        return '';
    }
}

Hy, вложенное дерево должно быть в сущности Category, а между сущностями Product и Category вы можете иметь сущность ProductCategory, где положение продукта в затронутой категории - store. Я надеюсь это ясно

Pec 20.07.2018 17:19

@Pec, но как я мог изменить позицию с продукта. Например, у кота 1-1 есть 10 продуктов, и я хочу изменить позицию продукта 3 на позицию 1. Каждую строку нужно обновить с новым порядком или что-то в этом роде

Bham 20.07.2018 17:40

Да, если вы хотите хорошее позиционирование, вы должны обновить каждый продукт для выбранной категории.

Pec 20.07.2018 17:52

Возможно ли обновление, или мне нужно удалить все, а затем вставить новые строки в порядке, или есть способ содержать строки и просто обновить позицию каким-то образом

Bham 20.07.2018 18:25

Вы можете просто обновить, вам решать, как это реализовать

Pec 23.07.2018 16:37

Я исправил это с помощью github.com/Atlantic18/DoctrineExtensions/blob/master/doc/…. Где вы могли бы использовать групповую функциональность для группировки сообщения. В этом случае группировка основана на категориях. Также используется medium.com/@treetop1500/… для перетаскивания в качестве основы

Bham 23.07.2018 17:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
6
1 029
0

Другие вопросы по теме