Генерация получателей и сеттеров в 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")
*/
Ответ 5
Использование:
orm: генерировать сущности-путь-путь
Пример в консоли:
doctrine orm:generate-entities --generate-annotations="true" destination_path
Источник: http://wildlyinaccurate.com/useful-doctrine-2-console-commands/
Ответ 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
И я чувствую, что это не ошибка, а лучшее понимание!