我的学说模型有问题。当我打电话给他时,我有一个错误,我不知道为什么......
我的实体:
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中解析我的问题。
答案 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写的那样 - Entity和Repository是分开的类。在正确获得Repository类之后的控制器中,您可以简单地调用每个方法:
$repository = $this->getDoctrine()->getRepository('YourBundleBundle:Download');
$result = $repository->myCustomMethod();