Answer the question
In order to leave comments, you need to log in
Make a polymorphic link for comments?
How to make a comment trait so that it can be reused in other entities?
Right now I did, but for a separate entity it creates a table with a ManyToMany relationship. Is it
possible to somehow disable the internal key and store the entity id and the entity itself in 1 table?
trait CommentTrait
{
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Comment", cascade={"persist"})
* @ORM\JoinTable(
* joinColumns={@ORM\JoinColumn(referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(referencedColumnName="id")}
* )
*/
private $comments;
public function __construct()
{
$this->comments = new ArrayCollection();
}
public function getComments()
{
return $this->comments;
}
public function addComment(Comment $comment)
{
$this->comments[] = $comment;
}
}
/**
* @ORM\Entity(repositoryClass="App\Repository\CommentRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Comment
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User")
*/
private $user;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $message;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $updated_at;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $created_at;
public function getId(): ?int
{
return $this->id;
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(?User $user): self
{
$this->user = $user;
return $this;
}
public function getMessage(): ?string
{
return $this->message;
}
public function setMessage(?string $message): self
{
$this->message = $message;
return $this;
}
public function getUpdatedAt(): ?\DateTimeInterface
{
return $this->updated_at;
}
public function setUpdatedAt(?\DateTimeInterface $updated_at): self
{
$this->updated_at = $updated_at;
return $this;
}
public function getCreatedAt(): ?\DateTimeInterface
{
return $this->created_at;
}
public function setCreatedAt(?\DateTimeInterface $created_at): self
{
$this->created_at = $created_at;
return $this;
}
/**
* @ORM\PrePersist
*/
public function setCreatedAtValue()
{
$this->created_at = new \DateTime();
}
}
Answer the question
In order to leave comments, you need to log in
I can even show you the code)
Here I implemented a similar functionality using the doctrine (the result of 1 in 1 polymorphic relationships as in Laravel's Eloquent ORM)
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question