suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Über die Implementierung der Wiederverwendung von Symfony-(Doktrin-)Tabellen

Es gibt vier Tische

Articles:(id, body)
Questions (id, body)
Votes (id, user_id, votable_id, vote_type)
comments(id, user_id, body, commentable_id, comment_type)

vote speichert die Like-Datensätze der Benutzer für Artikel und Fragen. Verwenden Sie vote_type, um zu unterscheiden, ob es sich bei den gespeicherten Datensätzen um Likes für Artikel oder Fragen handelt

idBenutzer-IDvotable_idvote_typeAnleitung121ArtikelDieser Datensatz zeigt an, dass Benutzer 2 Artikel 1 mit „Gefällt mir“ markiert hat121FrageDieser Datensatz zeigt an, dass Benutzer 2 Frage 1 mit „Gefällt mir“ markiert hat
comments speichert Benutzerantwortdatensätze auf Artikel und Fragen. Verwenden Sie commentable_type, um zu unterscheiden, ob es sich bei den gespeicherten Datensätzen um Antworten auf Artikel oder Fragen handelt

id11Ende des Hintergrunds;
Benutzer-ID commentable_id comment_type Anleitung
2 1 Artikel Dieser Datensatz stellt die Antwort von Benutzer 2 auf Artikel 1 dar
2 1 Frage Dieser Datensatz stellt die Antwort von Benutzer 2 auf Frage 1 dar

So deklarieren Sie die Zuordnungsbeziehung zwischen ihnen;

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;
}
怪我咯怪我咯2708 Tage vor789

Antworte allen(2)Ich werde antworten

  • 为情所困

    为情所困2017-07-03 11:44:27

    use Doctrine\ORM\Mapping as ORM;
    /**
     * @ORM\Entity
     * @ORM\Table(name="articles")
     */
    class Article
    {
        // ...
    }
    
    /**
     * @ORM\Entity
     * @ORM\Table(name="articles")
     */
    class ArticleVote extends Article
    {
        /**
         *
         * @OneToMany(targetEntity="VoteArticle", mappedBy="votable_id")
         */
        private $id;
    }
    
    /**
     * @ORM\Entity
     * @ORM\Table(name="articles")
     */
    class ArticleComment extends Article
    {
        /**
         *
         * @OneToMany(targetEntity="CommentArticle", mappedBy="commentable_id")
         */
        private $id;
    }
    
    /**
     * @ORM\Entity
     * @ORM\Table(name="votes")
     */
    class Vote
    {
        // ...
    }
    
    /**
     * @ORM\Entity
     * @ORM\Table(name="votes")
     */
    class VoteArticle
    {
        /**
         *
         * @ORM\ManyToOne(targetEntity="ArticleVote", inversedBy="id")
         */
        private $votable_id;
    }
    
    /**
     * @ORM\Entity
     * @ORM\Table(name="comments")
     */
    class Comment
    {
        // ...
    }
    
    /**
     * @ORM\Entity
     * @ORM\Table(name="comments")
     */
    class CommentArticle
    {
        /**
         *
         * @ORM\ManyToOne(targetEntity="ArticleComment", inversedBy="id")
         */
        private $commentable_id;
    }

    其他类似,另外,查询时添加Criteria,参见https://www.boxuk.com/insight...

    Antwort
    0
  • 为情所困

    为情所困2017-07-03 11:44:27

    @boxsnake 这样会有个新的问题

    >php bin/console doctrine:schema:update --force
    
    
      [Doctrine\DBAL\Schema\SchemaException]
      The table with name 'symfony.votes' already exists.
    
    
    doctrine:schema:update [--complete] [--dump-sql] [-f|--force] [--em [EM]] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-e|--env ENV] [--no-debug] [--] <command>

    Antwort
    0
  • StornierenAntwort