2016-06-17 8 views
0

Ich arbeite daran, einige Fehler zu beheben und einem bereits in Produktion befindlichen Projekt neue Funktionen hinzuzufügen.So aktualisieren Sie Entitäten und Datenbanken

Was ich brauche, ich denke zu tun ist sehr einfach für wer weiß Symfony2 und Lehre, aber ich bin Neuling und ich weiß nicht, wie man achive, was ich brauche:

Ich habe auf eine bestehende Einheit bekam PHP-Seite, die einer Tabelle in der Datenbank zugeordnet ist.

Was ich brauche, ist eine andere Entität zu erstellen, die einen Fremdschlüssel mit anderen Tabelle hat.

Ich habe versucht, zuerst die Tabelle in Datenbank zu erstellen, aber ich weiß nicht, wie die zugehörige Entität in PHP erstellt wird (mit korrekter Anmerkung auf die Fremdschlüssel) und wie die anderen Entitäten bearbeitet werden, die neu benötigt werden Attribut in der Klasse.

Was ich habe auch versucht, ist eine kommentierte PHP-Klasse wie diese zu erstellen:

<?php 
namespace MyProject\MyBundle\Entity; 
use Doctrine\ORM\Mapping as ORM; 
use JMS\Serializer\Annotation\ExclusionPolicy; 
use JMS\Serializer\Annotation\Groups; 
use JMS\Serializer\Annotation\SerializedName; 
use JMS\Serializer\Annotation\Type; 
use JMS\Serializer\Annotation\VirtualProperty; 
use MyProject\MyBundle\Model\ItemThumb; 


/** 
* @ORM\Entity 
* @ORM\Table(name="wall_message_comment_answer") 
*/ 
class WallMessageCommentAnswer { 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    * @Groups({"user_details", "search_around"}) 
    */ 
    protected $id; 

    /** 
    * @ORM\ManyToOne(targetEntity="User", inversedBy="wall_message_comments") 
    * @ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE") 
    * @Groups({}) 
    */ 
    public $user; 
    /** 
    * @var WallMessage 
    * @ORM\ManyToOne(targetEntity="WallMessage", inversedBy="users_comments") 
    * @ORM\JoinColumn(name="wall_message_id", referencedColumnName="id", onDelete="CASCADE") 
    */ 
    public $wall_message; 

    /** 
    * @var WallMessage 
    * @ORM\OneToMany(targetEntity="WallMessageComment", mappedBy="comment_answers") 
    * @ORM\JoinColumn(name="wall_message_comment_id", referencedColumnName="id", onDelete="CASCADE") 
    */ 
    public $wall_message_comment; 

    /** 
    * @var string 
    * @ORM\Column(type="string") 
    * @Groups({"user_details", "search_around"}) 
    */ 
    public $content; 

    /** 
    * @var int 
    * @ORM\Column(type="integer") 
    * @Groups({"user_details", "search_around"}) 
    */ 
    public $timestamp; 
} 

und dann versuchen, Getter und Setter zu erstellen, starten Sie den Befehl:

php app/console doctrine:generate:entities MyProjectMyBundle/Entity/WallMessageCommentAnswer 

Aber es gibt mir diesen Fehler:

[Symfony\Component\Debug\Exception\FatalErrorException]        
    Compile Error: Cannot redeclare MyProject\MyBundle\Entity\User::setDocumentNumber() 

wie es versucht, wieder andere Entitäten zu erstellen.

Konnte mir jemand helfen?

Danke!

+0

fügen Sie den Code Benutzereinheit. Es kann die Deklaration von setDocumentNumber() zweimal haben. –

+0

Warum wird dies mit "entity-framework" gekennzeichnet? :) –

Antwort

1

Warum versuchen Sie nicht, Entity mit php app/console doctrine:generate:entity Befehl zu erstellen. Sie werden nach dem Bundle-Namen, dem Entity-Namen und den Spalten gefragt.

Danach haben Sie .php Datei im angegebenen Bundle erstellt. Folgen Sie dieser URL, um die Beziehung zwischen Ihrer aktuellen und neuen Entität manuell hinzuzufügen.

http://symfony.com/doc/current/book/doctrine.html#relationship-mapping-metadata

Dies ist, wie Sie manyToOne Beziehung in Symfony usng Anmerkungen geben können Sie Ihren Weg zum Zuweisen diese Beziehung hin- und herschalten. (YML oder eine andere von Symfony unterstützt)

/** 
    * @ORM\ManyToOne(targetEntity="Category", inversedBy="products") 
    * @ORM\JoinColumn(name="category_id", referencedColumnName="id") 
    */ 

und geben OneToMany in Zieleinheit wie diese

/** 
    * @ORM\OneToMany(targetEntity="Product", mappedBy="category") 
    */ 

Nachdem Sie mit diesem fertig sind den folgenden Befehl die SQL-Abfragen über die Änderungen zu erhalten .

Sie erhalten SQL-Abfragen, die Sie kopieren und in der Produktionsumgebung ausführen müssen. Wenn Ihre Produktions- und Testumgebung identisch ist, führen Sie den folgenden Befehl aus.

php pap/console doctrine:schema:update --force 

Für obige Prozedur haben Sie nicht die Tabelle in der Datenbank erstellt werden. Doktrin macht das für dich.

Wenn Sie bereits Tabelle erstellt haben Sie können das entfernen, da es automatisch sein wird erstellt, wenn Sie das Schema erzwingen.

+0

Hallo Alok, die Art, wie ich Entity erstellt habe, ist das gleiche, was du sagst. Ich habe ein anderes Problem danach. Könnten Sie bitte einen Blick darauf werfen? http://stackoverflow.com/questions/37921912/added-entity-will-not-filled-from-repository – JackTurky

Verwandte Themen