rekalogika/doctrine-collections-decorator

允许您轻松创建装饰器类,以动态修改Doctrine Collection对象的行为,包括在您的实体中使用的由Doctrine ORM使用的集合对象。

2.3.0 2024-03-31 05:39 UTC

README

允许您轻松创建装饰器类,以动态修改Doctrine Collection对象的行为,包括在您的实体中使用的由Doctrine ORM使用的集合对象。

动机

自定义集合类不会很快集成到Doctrine ORM中。因此,修改Doctrine集合行为的唯一方法是使用装饰器。然而,手动创建集合装饰器是一个繁琐的过程。

概述

扩展我们抽象类之一的装饰器类

use Doctrine\Common\Collections\Collection;
use Rekalogika\Collections\Decorator\AbstractCollectionDecorator;

/**
 * @extends AbstractCollectionDecorator<array-key,Book>
 */
class BookCollection extends AbstractCollectionDecorator
{
    /**
     * @param Collection<array-key,Book> $collection
     */
    public function __construct(private Collection $collection)
    {
    }

    protected function getWrapped(): Collection
    {
        return $this->collection;
    }

    // add and override methods here:
    // ...
}

在实体中的使用

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity()]
class BookShelf
{
    /**
     * @var Collection<array-key,Book>
     */
    #[ORM\OneToMany(targetEntity: Book::class)]
    private Collection $books;

    public function __construct()
    {
        $this->books = new ArrayCollection();
    }

    public function getBooks(): BookCollection
    {
        return new BookCollection($this->bookskkk);
    }
}

文档

rekalogika.dev/doctrine-collections-decorator

许可证

MIT

贡献

问题和拉取请求应在GitHub仓库rekalogika/doctrine-collections-decorator中提交。