GEDMO/Lehre Baumweiterung kann das Objekt nicht als Array verwenden
Posted: 13 May 2025, 15:33
Ich habe eine Entität mit einer Verschlusstabelle und einem Repository neben dem Erstellen. Ich versuche ein grundlegendes Beispiel für das Erstellen eines Baumes, aber ich sehe, dass der Fehler kein Objekt vom Typ App \ Entity \ Diskussion \ Kommentar als Array beim Aufrufen von GetCompmentTreefordiscussion
Entität verwenden kann:
Entität verwenden kann:
Code: Select all
#[Gedmo\Tree(type: 'closure')]
#[Gedmo\TreeClosure(class: CommentClosure::class)]
#[ORM\Entity(repositoryClass: CommentRepository::class)]
#[ORM\HasLifecycleCallbacks]
class Comment implements Identifiable
{
use IdentifiableEntity;
use TimestampableEntity;
#[ORM\Column(type: 'text')]
private string $content;
#[ORM\ManyToOne(targetEntity: User::class)]
#[ORM\JoinColumn(nullable: false)]
private User $author;
#[ORM\ManyToOne(targetEntity: Discussion::class, inversedBy: 'comments')]
#[ORM\JoinColumn(nullable: false)]
private Discussion $discussion;
#[Gedmo\TreeParent]
#[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'replies')]
#[ORM\JoinColumn(referencedColumnName: 'id', nullable: true, onDelete: 'CASCADE')]
private ?Comment $parent = null;
#[ORM\OneToMany(targetEntity: self::class, mappedBy: 'parent', cascade: ['persist', 'remove'])]
private Collection $replies;
#[Gedmo\TreeLevel]
#[ORM\Column(type: 'integer')]
private int $level = 0;
#[ORM\ManyToMany(targetEntity: User::class)]
#[ORM\JoinTable(name: 'comment_likes')]
private Collection $likedBy;
// --- Getters / Setters
< /code>
Verschluss: < /p>
#[ORM\Entity]
class CommentClosure extends AbstractClosure
{
#[ORM\ManyToOne(targetEntity: Comment::class)]
#[ORM\JoinColumn(name: 'ancestor', referencedColumnName: 'id', nullable: false, onDelete: 'CASCADE')]
protected $ancestor;
#[ORM\ManyToOne(targetEntity: Comment::class)]
#[ORM\JoinColumn(name: 'descendant', referencedColumnName: 'id', nullable: false, onDelete: 'CASCADE')]
protected $descendant;
}
< /code>
Repository: < /p>
class CommentRepository extends ClosureTreeRepository
{
public function __construct(EntityManagerInterface $manager)
{
parent::__construct($manager, $manager->getClassMetadata(Comment::class));
}
public function getCommentTreeForDiscussion(Discussion $discussion): array
{
$roots = $this->findBy(['discussion' => $discussion, 'parent' => null], ['createdAt' => 'ASC']);
return $this->buildTree($roots);
}
}