Генерация получателей и сеттеров в Symfony/Doctrine ORM

У меня есть следующий объект ORM Symfony с только свойствами:

<?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;


}

Я хочу автоматически создавать сеттеры и геттеры, поэтому я запускаю следующую команду:

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

И каждый раз, когда я это делаю, появляется следующее сообщение об ошибке:

  [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

Я не знаю, почему он не генерирует сущности, что-то не так в сущности/аннотации?

Ответы

Ответ 1

Попробуйте удалить этот объект и восстановить его следующей командой:

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"

Затем добавьте вручную:

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

Ответ 2

попробуйте:

app/console doctrine:generate:entities EvrHomeBundle:Article

Ответ 3

php bin/console doctrine:generate:entities AppBundle

Это автоматически сгенерирует все необходимые геттеры и сеттеры в файлы сущностей.

Если вы хотите быть конкретным в отношении таблиц, используйте это:

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

Замените "TABLE_NAME" на имя вашей таблицы.

Ответ 4

Будьте полезны также ORM, чтобы рассчитывать на создание геттеров/сеттеров:

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

 */

Ответ 6

Мысль о том, что недостающее * является одним из решений

Но в моем случае при создании объекта из командной строки я предпочитал формат конфигурации YML вместо аннотаций.

Теперь то, что я делаю, дает команды отображения с помощью аннотаций, поэтому он не работает.

Попробуйте настроить ресурсы /config/Category.orm.yml как:

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

И измените Ресурсы /config/Product.orm.yml как:

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

И я чувствую, что это не ошибка, а лучшее понимание!