2014-02-10 6 views
0

У меня проблема с моей моделью доктрины. Когда я звоню ему, что есть ошибка, и я не знаю, почему ...Ошибка в модели доктрины

Моя сущность:

namespace Dimi\YvmBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\ORM\EntityRepository; 

/** 
* Download 
* 
* @ORM\Table("t_download") 
* @ORM\Entity(repositoryClass="Dimi\YvmBundle\Entity\DownloadRepository") 
*/ 
class Download extends EntityRepository 
{ 


    public function getLastDownload() 
    { 

     $em = $this->getEntityManager(); 
     //$em = $this->getDoctrine()->getManager(); 
     $query = $em->createQueryBuilder(); 

     $query->select('d') 
      ->from('DimiYvmBundle:Download', 'd') 
      ->orderBy('d.id', 'DESC') 
      ->groupBy('d.ytId'); 


     $query->setMaxResults(48); 
     return $query->getQuery()->getResult(); 

    } 

} 

TopController.php:

public function getLastDownload() 
    { 

     $query = $this->createQueryBuilder('q'); 

     $query->select('d') 
      ->from('DimiYvmBundle:Download', 'd') 
      ->orderBy('d.id', 'DESC') 
      ->groupBy('d.ytId'); 


     $query->setMaxResults(48); 
     return $query->getQuery()->getResult(); 

    } 

Ошибка:

ContextErrorException: Warning: Missing argument 1 for Doctrine\ORM\EntityRepository::__construct(), called in /var/www/site/main.site/Symfony2/src/Dimi/YvmBundle/Controller/TopController.php on line 28 and defined in /var/www/site/main.site/Symfony2/vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php line 67 

Знаете ли вы, как я могу это исправить?

Спасибо вам всем за помощь. С наилучшими пожеланиями,

EDIT:

я решил мою проблему, с доктриной, если вы хотите создать свой собственный запрос, вы должны записать их в myentitiRepository.php, а не непосредственно в myentity.php.

+0

Пожалуйста, покажите мне свою 'TopController.php' около 28 строк. – NHG

+0

Итак, вероятно проблема связана с '$ em = $ this-> getEntityManager();'. Попробуйте удалить эту строку и измените '$ query = $ em-> createQueryBuilder();' to '$ query = $ this-> createQueryBuilder ('q');'. Дайте мне знать, если он работает после изменений:) – NHG

+0

О, я укусил, что вы забыли о параметре псевдонима для метода createQueryBuilder(). Поэтому добавьте псевдоним типа 'createQueryBuilder ('q')'. – NHG

ответ

4

Я предполагаю, что это доктрина 2 и Опубликованная кода Скачать объект является точной?

У вас есть: класс Download extends EntityRepository, который просто ошибочен.

Объекты не распространяют репозитории. Два совершенно разных объекта.

Вы должны иметь:

/ ** 
    * Download Entity 
    * 
    * @ORM\Table("t_download") 
    * @ORM\Entity(repositoryClass="Dimi\YvmBundle\Entity\DownloadRepository") 
*/ 
class Download 
{ 
    /* @Id */ 
    protected $id; 

    /* Other property mappings */ 

и

class DownLoadRepository extends EntityRepository 
{ 
    // Your custom queries 

И да, код построения запросов требует доработки. Но сначала получите свою сущность и репозиторий в отдельных классах.

+0

Спасибо вам за помощь! Это хорошо! – Dimitri

1

Итак, прежде всего, вы должны определить псевдоним запроса для метода createQueryBuilder(), например -createQueryBuilder('q');. Далее следует использовать более короткие обозначения: $this->createQueryBuilder(); вместо $query = $this->getEntityManager()->createQueryBuilder();.

Сравнить: getEntityManager() и createQueryBuilder($alias)

Кроме того, вы должны получить Download хранилище с помощью $this->getDoctrine()->getRepository('YourBundleBundle:Download') в контроллере. Когда вы вызываете new Download(), также вызывается метод построения расширенного Doctrine\ORM\EntityRepository, и он вызывает ошибку.

Как @Cerad написал - Entity и Repository - это отдельные классы. В контроллере после того, как правильно есть Repository класс, вы можете позвонить каждый метод прост:

$repository = $this->getDoctrine()->getRepository('YourBundleBundle:Download'); 
$result = $repository->myCustomMethod(); 
+0

Я редактировал метод сущности, но у меня такая же ошибка ... – Dimitri

+0

@Dimi Я обновил свой ответ - у вас есть ваш репозиторий неправильно. – NHG

+0

Я изменил это в своем контроллере, но знаете ли вы, как я могу назвать метод объекта с моего контроллера? '$ lasdl = $ this-> getDoctrine() -> getRepository ('DimiYvmBundle: Загрузить') -> getLastDownload();'? – Dimitri

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