学说模型中的错误

时间:2014-02-10 21:52:43

标签: php symfony doctrine

我的学说模型有问题。当我打电话给他时,我有一个错误,我不知道为什么......

我的实体:

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

你知道我怎么解决这个问题吗?

谢谢大家的帮助。 最好的问候,

编辑:

我已经解决了我的问题,如果你想创建自定义查询,你必须将它们写入myentitiRepository.php,而不是直接在myentity.php中解析我的问题。

2 个答案:

答案 0 :(得分:4)

我假设这是Doctrine 2并且您发布的下载实体代码是准确的吗?

你有:类下载扩展了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

是的,您的查询构建代码需要一些工作。但首先要将您的实体和存储库放在不同的类中。

答案 1 :(得分: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写的那样 - EntityRepository是分开的类。在正确获得Repository类之后的控制器中,您可以简单地调用每个方法:

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