web-dev-qa-db-fra.com

Getters et Setters d'entités génératrices dans Symfony/Doctrine ORM

J'ai l'entité ORM Symfony suivante avec uniquement des propriétés: 

<?php

namespace Evr\HomeBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(name="ev_article")
 * @ORM\Entity
 */
class Article
{
    /**
     *
     * @ORM\Column(name="article_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * 
     * @ORM\ManyToOne(targetEntity="Subategory",inversedBy="articles")
     * @ORM\JoinColumn(name="subcategory_id",referencedColumnName="id")
     */
    private $subcategory;


    /**
     * 
     * @ORM\Column(type="string",length=512)
     */
    private $title;

    /**
     * 
     * @ORM\Column(type="text")
     */
    private $content;

    /**
     * 
     * @ORM\Column(type="text")
     */
    private $exclusive_content;

    /**
     * 
     * @ORM\Column(type="date")
     */
    private $creation_date;


     /**
     * 
     * @ORM\Column(type="integer")
     */
    private $views;

    /**
     * 
     * @ORM\Column(type="integer")
     */
    private $votes;


}

Je veux générer des setters et des getters automatiquement, alors je lance la commande suivante: 

app/console doctrine:generate:entities Evr/HomeBundle/Entity/Article

Et chaque fois que je fais cela, le message d'erreur suivant s'affiche:

  [Doctrine\ORM\Mapping\MappingException]
  Class "Evr\HomeBundle\Entity\Article" is not a valid entity or mapped super
   class.



doctrine:generate:entities [--path="..."] [--no-backup] name

Je ne sais pas pourquoi il ne génère pas d'entités, quelque chose ne va pas dans l'entité/les annotations?

20
SmootQ

Essayez de supprimer cette entité et de les régénérer avec la commande suivante:

php app/console doctrine:generate:entity --entity="EvrHomeBundle:Article" --fields="name:string(255) content:text exclusive_content:text creation_date:date views:integer votes:integer"

Et ajoutez ensuite manuellement:

/**
 * 
 * @ORM\ManyToOne(targetEntity="Subategory",inversedBy="articles")
 * @ORM\JoinColumn(name="subcategory_id",referencedColumnName="id")
 */
private $subcategory;
10
Victor Bocharsky

essayez: 

app/console doctrine:generate:entities EvrHomeBundle:Article

Si vous utilisez symfony 3.0 ou supérieur, remplacez app par bin: 

bin/console doctrine:generate:entities EvrHomeBundle:Article

Si vous utilisez symfony 4+, alors: 

bin/console make:entity --regenerate 
38
zizoujab
php bin/console doctrine:generate:entities AppBundle

Cela générera automatiquement tous les getters et setters nécessaires dans vos fichiers d'entité.

Si vous voulez être spécifique sur les tables, utilisez ceci:

php bin/console doctrine:generate:entities AppBundle:"TABLE_NAME"

Remplacez "TABLE_NAME" par le nom de votre table.

8
jcoder

Attention également à l'ORM, qui compte pour générer des getters/setters:

/**
 * @var date
 *
 * @ORM\Column(name="creation_date", type="date")

 */
2
aurny2420289

Pensé que le manque * est l'une des solutions

Mais dans mon cas, lors de la création de l'entité à partir de la commande Invite, j'ai préféré que le format de configuration soit YML, au lieu d'annotations.

Maintenant, ce que je fais donne des commandes de mappage en utilisant des annotations, donc cela ne fonctionne pas.

Essayez de configurer Resources/config/Category.orm.yml en tant que:

AppBundle\Entity\Category:
    type: entity
    table: null
    repositoryClass: AppBundle\Repository\CategoryRepository
    oneToMany:
        products:
            targetEntity: Product
            mappedBy: Category

Et changez le fichier Resources/config/Product.orm.yml comme suit:

AppBundle\Entity\Product:
    type: entity
    table: null
    repositoryClass: AppBundle\Repository\ProductRepository
    manyToOne:
        category:
            targetEntity: Category
            inversedBy: products
            joinColumn:
                name: category_id
                referenceColumnName: id

Et j'estime que ce n'est pas un bug mais une meilleure compréhension!

1

Importation de mappage (depuis la base de données) 

_> php bin/console doctrine:mapping:import 'AppBundle\Entity' yml --path=src/AppBundle/Resources/config/doctrine

Générer des Entityes à partir de la cartographie mais sans les accesseurs ni les setters

_> php bin/console doctrine:mapping:convert annotation ./src 

OR

Générer des Entityes à partir d'une cartographie avec des accesseurs et des setters

_> php bin/console doctrine:generate:entities AppBundle/Entity
1
Oleksandr P.

Usage: 

orm: générer-entités dest-chemin

Exemple en console: 

doctrine orm:generate-entities --generate-annotations="true" destination_path

Source: http://wildlyinaccurate.com/useful-doctrine-2-console-commands/

1