2015-01-27 3 views
3

Я использую Symfony2 для создания некоторых фиктивных проектов. Я придерживаюсь документации по книге Symfony2, чтобы создать командную строку Entity with Doctrine (http://symfony.com/doc/current/book/doctrine.html#add-mapping-information). Я использую, таким образом, аннотации, простой объект Продукт и никаких ассоциаций.Symfony2 и Doctrine2: Идентификатор/первичный ключ, определенные для объекта «X». У каждого объекта должен быть идентификатор/первичный ключ

Я скопировал точный пример: я успешно создал базу данных и создал таблицу Product. Затем я удалил все и попытался воссоздать базу данных (все в порядке) и таблицу (проблема!), Что только для целей тестирования. Doctrine не может генерировать больше геттеров и сеттеров и не может создать таблицу в базе данных MySQL.

Вот некоторые выходные

app/console doctrine:generate:entities MyBundle 

> backing up Product.php to Product.php~ 
> generating MyBundle\Entity\Product 

(nothing happens except for creating the identical backup file with no setters/getters added) 

-

app/console doctrine:schema:validate 
OR 
app/console doctrine:schema:create 
OR 
app/console doctrine:schema:update --force 
---------- 
[Doctrine\ORM\Mapping\MappingException] 
No identifier/primary key specified for Entity "MyBundle\Entity\Product". 
Every Entity must have an identifier/primary key. 

doctrine:schema:validate [--em[="..."]] 

Моя Архитектура

PHP   5.5.21 (tried also with PHP 5.5.14) 
Apache  2.4.9 
Mac OSX  10.10.1 - Yosemite 
MySQL  5 
ENV   dev 

Composer установленных пакетов

doctrine/annotations     v1.2.3 Docblock Annotations Parser 
doctrine/cache      v1.4.0 Caching library offering an object-oriented API for many cache backends 
doctrine/collections     v1.2 Collections Abstraction library 
doctrine/common      v2.4.2 Common Library for Doctrine projects 
doctrine/dbal      v2.5.1 Database Abstraction Layer 
doctrine/doctrine-bundle    v1.3.0 Symfony DoctrineBundle 
doctrine/doctrine-cache-bundle  v1.0.1 Symfony2 Bundle for Doctrine Cache 
doctrine/inflector     v1.0.1 Common String Manipulations with regard to casing and singular/plural rules. 
doctrine/lexer      v1.0.1 Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers. 
doctrine/orm       v2.4.7 Object-Relational-Mapper for PHP 
incenteev/composer-parameter-handler v2.1.0 Composer script handling your ignored parameter file 
jdorn/sql-formatter     v1.2.17 a PHP SQL highlighting library 
kriswallsmith/assetic    v1.2.1 Asset Management for PHP 
monolog/monolog      1.12.0 Sends your logs to files, sockets, inboxes, databases and various web services 
psr/log        1.0.0 Common interface for logging libraries 
sensio/distribution-bundle   v3.0.15 Base bundle for Symfony Distributions 
sensio/framework-extra-bundle  v3.0.4 This bundle provides a way to configure your controllers with annotations 
sensio/generator-bundle    v2.5.1 This bundle generates code for you 
sensiolabs/security-checker   v2.0.1 A security checker for your composer.lock 
swiftmailer/swiftmailer    v5.3.1 Swiftmailer, free feature-rich PHP mailer 
symfony/assetic-bundle    v2.6.0 Integrates Assetic into Symfony2 
symfony/monolog-bundle    v2.7.1 Symfony MonologBundle 
symfony/swiftmailer-bundle   v2.3.8 Symfony SwiftmailerBundle 
symfony/symfony      v2.6.3 The Symfony PHP framework 
twig/extensions      v1.2.0 Common additional features for Twig that do not directly belong in core 
twig/twig       v1.18.0 Twig, the flexible, fast, and secure template language for PHP 

Мой код

Мой код точно так, как в документации Symfony2 книги по названию Bundle за исключением, изменено на MyBundle. Структура файлов и папок работает с другими функциями. Для проекта нет конкретных настроек, просто основы.

namespace MyBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="product") 
*/ 
class Product 
{ 
    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(type="string", length=100) 
    */ 
    protected $name; 

    /** 
    * @ORM\Column(type="decimal", scale=2) 
    */ 
    protected $price; 

    /** 
    * @ORM\Column(type="text") 
    */ 
    protected $description; 
} 

Уже пытался

  • разрешений Изменения проекта
  • Выполнить "приложение/консольные доктрины: генерировать: объекты" в качестве корня
  • Очистить кэш
    • Выполнить ca Che: ясно и кэш: прогрев
    • вручную удалить папку кэша
  • Keep только идентификатор (как первичный ключ) в объекте продукта
  • Извлеките и воссоздать всю базу данных
  • Remove Product Entity, очистите кеш и заново создайте все (вручную)
  • Обновить все продавцы
  • Проверено все двойное ** для аннотаций
  • Изменить компьютер с той же программной архитектурой
  • Я также исполнил (спасибо @Srdjan) PHP приложения/консоль доктрина: кэш: ясно-метаданные & & приложения/консоль доктрины: кэш: ясно-запрос & & приложения/консоль доктриной: кэш: ясно-результат но методы получения и установки не генерируются
  • Я удалил таблицу, базу данных и воссоздал шаг за шагом (спасибо @paistra)
  • Я попытался удалить таблицу

    приложения/консольная доктрина: схема: падение

но ошибка всегда одинаков

[Doctrine\ORM\Mapping\MappingException] 
No identifier/primary key specified for Entity "MyBundle\Entity\Product". 
Every Entity must have an identifier/primary key. 

даже если таблица не существует ..


Благодарит Вас за ваша помощь

+0

ну это не ответ, но я могу хотя бы подтвердить, что я на той же лодке, что и вы ... по крайней мере, я знаю, что я не единственный. Единственное, что кажется другим, это то, что я создал объект из существующего db. Но я вошел и добавил последословие аннотации Id, чтобы сделать его счастливым. – StrikeForceZero

+0

Я узнал о своей проблеме. если у вас есть несколько файлов сопоставления. в моем случае 'AppBundle \ Resources \ config \ doctrine \ MyEntity.doctrine.xml' и аннотации в' AppBundle \ Entity \ MyEntity.php', он сначала попытается использовать xml. После удаления xml (так как я хотел аннотации) он работал нормально. (см. ответ ниже) – StrikeForceZero

ответ

0

В объекте проверки проекта Продукт определяется как пример (с комментарием @ORM ...)

попробовать стол падение Produt тоже, когда сделать новый тест

// src/AppBundle/Entity/Product.php 
namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="product") 
*/ 
class Product 
{ 
    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(type="string", length=100) 
    */ 
    protected $name; 

    /** 
    * @ORM\Column(type="decimal", scale=2) 
    */ 
    protected $price; 

    /** 
    * @ORM\Column(type="text") 
    */ 
    protected $description; 
} 
0

Если вы сделали изменения в классе сущностей вы должны очистить кэш Doctrine также:

php app/console doctrine:cache:clear-metadata && app/console doctrine:cache:clear-query && app/console doctrine:cache:clear-result 
+0

Я пробовал, но он не изменил результат ошибки – Mauro

0

да, моя сущность продукта точно так же, как вы сообщили

namespace MyBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="product") 
*/ 
class Product 
{ 
    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(type="string", length=100) 
    */ 
    protected $name; 

    /** 
    * @ORM\Column(type="decimal", scale=2) 
    */ 
    protected $price; 

    /** 
    * @ORM\Column(type="text") 
    */ 
    protected $description; 
} 
+0

, вы говорите, что вы создали таблицу «protuct», попробуйте ее сбросить. – pietro

+0

Я попытался, но удивительно, что ошибка аналогична «первичному ключу (даже если таблица не существует). – Mauro

+0

база данных дампов и ее создание с помощью консоли symfony – pietro

3

Если вы преобразовали свои сопоставления в аннотации из xml/yml обязательно удалите старые файлы сопоставлений.

В этом примере бега: php app/console doctrine:mapping:convert annotation

конвертировать: AppBundle\Resources\config\doctrine\MyEntity.doctrine.xml

в аннотации рядный с этим файлом: AppBundle\Entity\MyEntity.php

ошибка возникает из-за его использования XML-отображений, прежде чем он использует аннотации. Удалите xml и должно быть хорошо.

+0

Очень хороший подход! Хорошо видно – paido

Смежные вопросы