pvsaintpe / ltree-bundle
Symfony 4 为 postgresql ltree 扩展提供的包
2.0.1
2021-03-03 12:00 UTC
Requires
- php: ^7.4|^8.0
- symfony/orm-pack: ^1.0|^2.0
- symfony/property-access: ^4.2|^5.0
Conflicts
README
安装
composer require pvsaintpe/ltree-bundle
使用
- 创建实体类
use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping\Entity; use LTree\Annotation\LTreeChilds; use LTree\Annotation\LTreeEntity; use LTree\Annotation\LTreeParent; use LTree\Annotation\LTreePath; use LTree\Repository\LTreeEntityInterface; /** * Class TestEntity * @package LTree\Entity * * @Entity(repositoryClass="LTree\Entity\TestRepository") * @LTreeEntity() */ class TestEntity implements LTreeEntityInterface { /** * @ORM\Id() * @ORM\GeneratedValue(strategy="AUTO") * @ORM\Column(type="integer") */ private $id; /** * @LTreePath() * @ORM\Column(type="ltree") */ private $path = null; /** * @LTreeParent() * @ORM\ManyToOne(targetEntity="TestEntity", inversedBy="children") * @ORM\JoinColumn(name="parent_id", referencedColumnName="id") */ private $parent; /** * @LTreeChilds() * @ORM\OneToMany(targetEntity="TestEntity", mappedBy="parent", cascade={"all"}, orphanRemoval=true) * @ORM\JoinColumn(onDelete="CASCADE") */ private $children; /** * Constructor */ public function __construct() { $this->children = new ArrayCollection(); } }
- 创建存储库类
use Doctrine\ORM\EntityManagerInterface; use LTree\Repository\LTreeEntityRepository; /** * Class TestRepository * * @method TestEntity|null find($id, $lockMode = null, $lockVersion = null) * @method TestEntity|null findOneBy(array $criteria, array $orderBy = null) * @method TestEntity[] findAll() * @method TestEntity[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) * * @package LTree\Entity */ class TestRepository extends LTreeEntityRepository { /** * TestRepository constructor. * @param EntityManagerInterface $registry */ public function __construct(EntityManagerInterface $registry) { parent::__construct($registry, $registry->getClassMetadata(TestEntity::class)); } }
- 通过迁移创建扩展
public function up(Schema $schema) : void { $this->addSql('CREATE IF NOT EXISTS EXTENSION ltree'); } ...
- 通过配置(packages/doctrine.yaml)配置 Doctrine 类型
doctrine: dbal: url: '%env(resolve:DATABASE_URL)%' types: ltree: LTree\Types\LTreeType
- 通过配置(bundles.php)配置包
LTree\LTreeExtensionBundle::class => ['all' => true],