Il y a quatre tables
Articles:(id, body)
Questions (id, body)
Votes (id, user_id, votable_id, vote_type)
comments(id, user_id, body, commentable_id, comment_type)
vote stocke les enregistrements de likes des utilisateurs pour les articles et les questions ; utilisez vote_type pour distinguer si les enregistrements stockés sont des likes pour des articles ou des questions
id | identifiant_utilisateur | votable_id | vote_type | Instructions |
---|---|---|---|---|
1 | 2 | 1 | article | Cet enregistrement indique que l'utilisateur 2 a aimé l'article 1 |
1 | 2 | 1 | question | Cet enregistrement indique que l'utilisateur 2 a aimé la question 1 |
comments stocke les enregistrements de réponses des utilisateurs aux articles et aux questions ; utilisez commentable_type pour distinguer si les enregistrements stockés sont des réponses à des articles ou à des questions
id | identifiant_utilisateur | commentable_id | comment_type | Instructions |
---|---|---|---|---|
1 | 2 | 1 | article | Cet enregistrement représente la réponse de l'utilisateur 2 à l'article 1 |
1 | 2 | 1 | question | Cet enregistrement représente la réponse de l'utilisateur 2 à la question 1 |
Fin du fond ;
Alors, comment déclarer la relation cartographique entre eux ;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="articles")
*/
class Article
{
//...
/**
*
* @ORM\OneToMany(targetEntity="Vote", mappedBy="votable")
*/
$votes;
}
class Vote
{
//...
/**
*
* @ORM\ManyToOne(targetEntity="Article|Question?", inversedBy="votes")
*/
$votes;
}
D'autres sont similaires. De plus, ajoutez des critères lors de l'interrogation, voir https://www.boxuk.com/insight...
@boxsnake Cela créera une nouvelle question