Нет аннотаций, созданных для созданных объектов
Это может быть вопрос новичка, и в документации Symfony я не смог его найти. Я установил Symfony в соответствии с документами и создал базу данных, используя руководство "database & doctrine". После этого я создал сущность, используя доктрину. Когда я это сделал, я заметил, что никаких аннотаций там, где они созданы. В качестве комплекта я использовал AppBundle, который также находится в моем AppKernel следующим образом:
$bundles = [
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
new Symfony\Bundle\TwigBundle\TwigBundle(),
new Symfony\Bundle\MonologBundle\MonologBundle(),
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new Symfony\Bundle\AsseticBundle\AsseticBundle(),
new AppBundle\AppBundle(),
];
ОБНОВЛЕНИЕ: Использование команды php bin/console doctrine:generate:entity
Я создал Entity Foo, используя аннотацию (вместо yml, php или xml), что привело к следующему:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Foo
*
* @ORM\Table(name="foo")
* @ORM\Entity(repositoryClass="AppBundle\Repository\FooRepository")
*/
class Foo
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="bar", type="string", length=35)
*/
private $bar;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set bar
*
* @param string $bar
*
* @return Foo
*/
public function setBar($bar)
{
$this->bar = $bar;
return $this;
}
/**
* Get bar
*
* @return string
*/
public function getBar()
{
return $this->bar;
}
}
Так что он также генерировал аннотации, но я все еще не могу сгенерировать схему базы данных:(
Исходный вопрос ниже устарел. По какой причине я должен вводить свои аннотации вручную?
2 ответа
Ок, я разобрался с проблемой.
Используя интерактивное руководство, я пропустил аннотации "option". Это была первая ошибка, которую я сделал.
Вторая ошибка, которую я сделал, заключалась в том, что я создавал сущности в сборке в AppBundle. Когда я создал свой собственный Bundle, все работало безупречно:)
Хорошо, я думаю, вы не понимаете, как создаются базы данных с помощью Doctriine.
Классы сущностей (в src/AppBundle/Entity/
) определить, ну, сущности, которые являются сопоставленными таблицами.
Эти классы имеют свойства (или переменные), которые представляют столбцы (или ассоциации). Эти свойства должны быть аннотированы, чтобы доктрина знала, какой тип столбца создать.
Теперь эти классы могут быть созданы полностью вручную или сгенерированы с помощью следующей команды:
php app/console generate:doctrine:entity
Но вы должны понимать, что это всего лишь ярлык - вы по-прежнему несете ответственность за поддержание и разработку схемы.
Итак, чтобы ответить на ваш вопрос:
По какой причине я должен вводить свои аннотации вручную?
Поскольку доктрина не может знать, какие данные вы хотите сохранить, аннотации - это способ объяснить доктрине (и symfony), что вам нужно.
Не забудь бежать doctrine:schema:create
на самом деле создать таблицы, описанные в ваших сущностях.