2013-10-14 4 views
0

Я обычно работаю с symfony из версий 2.1 или 2.2. Сегодня я начал новый проект на 2.3, и я столкнулся с проблемами для создания моего настраиваемого репозитория объектов.Ошибка хранилища объектов Symfony-2.3

Моя сущность является:

<?php 

    namespace Acme\MyBundle\Entity; 

    use Doctrine\ORM\Mapping as ORM; 

    /** 
    * AnnualProduction 
    * 
    * @ORM\Table(name="Annual_Production") 
    * @ORM\Entity(repositoryClass="Acme\MyBundle\Entity\AnnualproductionRepository") 
    */ 
    class AnnualProduction 
    { 
     /** 
     * @var string 
     * 
     * @ORM\Column(name="device_address", type="string", length=45, nullable=true) 
     */ 
     private $deviceAddress; 

     /** 
     * @var integer 
     * 
     * @ORM\Column(name="mese_1", type="integer", nullable=true) 
     */ 
     private $mese1; 

     /** 
     * @var integer 
     * 
     * @ORM\Column(name="mese_2", type="integer", nullable=true) 
     */ 

SOME MISSING VAR SET AND GET 


     /** 
     * @var string 
     * 
     * @ORM\Column(name="sens_id", type="string", length=45) 
     * @ORM\Id 
     * @ORM\GeneratedValue(strategy="NONE") 
     */ 
     private $sensId; 

     /** 
     * @var \DateTime 
     * 
     * @ORM\Column(name="AAAA", type="date") 
     * @ORM\Id 
     * @ORM\GeneratedValue(strategy="NONE") 
     */ 
     private $aaaa; 

    /** 
     * Set deviceAddress 
     * 
     * @param string $deviceAddress 
     * @return AnnualProduction 
     */ 
     public function setDeviceAddress($deviceAddress) 
     { 
      $this->deviceAddress = $deviceAddress; 

      return $this; 
     } 

     /** 
     * Get deviceAddress 
     * 
     * @return string 
     */ 
     public function getDeviceAddress() 
     { 
      return $this->deviceAddress; 
     } 

     /** 
     * Set mese1 
     * 
     * @param integer $mese1 
     * @return AnnualProduction 
     */ 
     public function setMese1($mese1) 
     { 
      $this->mese1 = $mese1; 

      return $this; 
     } 

     /** 
     * Get mese1 
     * 
     * @return integer 
     */ 
     public function getMese1() 
     { 
      return $this->mese1; 
     } 
     /** 
     * Set sensId 
     * 
     * @param string $sensId 
     * @return AnnualProduction 
     */ 
     public function setSensId($sensId) 
     { 
      $this->sensId = $sensId; 

      return $this; 
     } 

     /** 
     * Get sensId 
     * 
     * @return string 
     */ 
     public function getSensId() 
     { 
      return $this->sensId; 
     } 

     /** 
     * Set aaaa 
     * 
     * @param \DateTime $aaaa 
     * @return AnnualProduction 
     */ 
     public function setAaaa($aaaa) 
     { 
      $this->aaaa = $aaaa; 

      return $this; 
     } 

     /** 
     * Get aaaa 
     * 
     * @return \DateTime 
     */ 
     public function getAaaa() 
     { 
      return $this->aaaa; 
     } 
    } 

Я не пишу все переменные и получить и наборы функций. Я создал репозиторий файл: Acme \ MyBundle \ Entity \ AnnualproductionRepository.php

Код для файла хранилища является следующее:

<?php 


namespace Acme\MyBundle\Entity; 


use Doctrine\ORM\EntityRepository; 
use Doctrine\ORM\NoResultException; 
use Acme\MyBundle\Entity\AnnualProduction; 

class AnnualproductionRepository extends EntityRepository 
{ 

    public function findByYearMonthDay($anno, $mese, $giorno, $sensId) 
    { 
     $query = $this->getEntityManager() 
     ->createQuery(" SOME QUERY HERE")->setParameters(array(SOME PARAMETERS                 HERE)); 
     return $query->getSingleResult(); 
    } 
} 

Я называю хранилище в одном из моего контроллера, с следующий код:

<?php 

namespace Acme\MyBundle\Controller; 


use Acme\MyBundle\Entity\AnnualProduction; 
use Acme\MyBundle\Entity; 

use Symfony\Component\HttpFoundation\RedirectResponse; 
use Symfony\Component\Security\Core\Exception\AccessDeniedException; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\Validator\Constraints\Date; 



class DataController extends Controller{ 

    public function indexUserAction(){ 

* 
* 
* 
* 
* 
    $DailyProduction=$DailyProduction+$em->getRepository('AcmeMyBundle:AnnualProduction')->findByYearMonthDay($year, $month, $day, $productionSensor); 
* 
* 
* 
* 
    } 
} 

Но я получаю эту ошибку, как хранилище оленьей кожи существовать и контроллер получить имя функции, как по умолчанию findBy * на один из атрибутов Сущности.

ОШИБКА: *> организации 'Acme \ MyBundle \ Entity \ AnnualProduction' не имеет поля

'yearMonthDay'. You can therefore not call 'findByYearMonthDay' on the entities' repository***

Есть ли у вас какой-нибудь совет, чтобы решить эту проблему? код, похоже, идентичен тому, который я обычно добавляю, чтобы включить настраиваемый репозиторий объектов в symfony 2.2, но по какой-то причине он отказывается работать. Tx для вашего времени и помощи.

ответ

2

Проблема решена. Дело в том, что файлы entity.orm.xml, хранящиеся в/src/acme/myBundle/config/doctrine, имеют высокий приоритет над файлами сущности, поэтому каждая модификация объекта, делая чтение.

РЕШЕНИЕ: Удалите все файлы entity.orm.xml после завершения аннотации генерации объекта с помощью команды терминала php.

0

Пространство имен для вашего репозитория неверно. Вместо этого вы должны иметь Acme \ MyBundle \ Entity \ Repository для пространства имен. Путь к вашему файлу должен быть Acme/MyBundle/Entity/Repository/AnnualProduction.

Вы также должны позволить доктриной генерировать все ваши объекты для вас через

php app/console doctrine:generate:entities Acme 

Вы увидите папку с именем Хранилища в папке Сущности и то, где нужно все объекты, которые будут сохранены.

+0

tx для вашего ответа. Я изменил пространства имен в аннотации объекта FROM: @ORM \ Entity (repositoryClass = "Acme \ MyBundle \ Entity \ AnnualConsumptionRepository") TO: @ORM \ Entity (repositoryClass = "Acme \ MyBundle \ Entity \ Repository \ AnnualConsumption") Затем я использую команду: php app/console doctrine: generate: entity Acme, но она сгенерировала меня только сущности, не создала папку хранилища и не создавала файл репозитория. Я что-то делаю неправильно? – groot

+0

Я нашел answare в том, что в этом сообщении не создается автоматическое создание сущности/репозитория: http://stackoverflow.com/questions/14115143/symfony2s-doctrinegenerateentities-doesnt-generate-repo-classes, которые я имею в факты, чтобы сгенерировать папку и файлы, которые я сам, как я делал. В этом случае нет разницы между моей начальной конфигурацией и вашим предложением.Я попробовал ваше пространство имен с файлом сущности/репозитория, а файлы сгенерированы вручную, но проблема осталась прежней. – groot

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