目前我已经创建了一个名为getData.php的模型,该模型使用原始查询从数据库中提取信息并将其传递回主控制器。
访问getdata.php
namespace Destination\AppBundle\Models;
use Doctrine\ORM\EntityRepository;
class getData extends EntityRepository
{
public function getInfo(){
$stmt = $this->getEntityManager()
->getConnection()
->prepare('select * cms_clients');
$stmt->execute();
$result = $stmt->fetchAll();
return $result;
}
}
Maincontroller.php
namespace Destination\AppBundle\Controller;
use Doctrine\ORM\EntityRepository;
use Destination\InterfaceBundle\Controller\AbstractController;
use Destination\AppBundle\Models\getData;
class DefaultController extends AbstractController
public function indexAction(Request $request)
{
$fetchData = new getData;
$fetchData->getInfo();
return $this->render('DestinationAppBundle:Default:app.html.twig');
}
]
但我一直得到同样的错误说
ContextErrorException:警告:缺少参数1 Doctrine \ ORM \ EntityRepository :: __ construct(),调用 C:\ Users \用户brent.french \文档\ WWW \用户\程序\ SRC \目标\的appbundle \控制器\ DefaultController.php 在第33行并在中定义 C:\ Users \用户brent.french \文档\ WWW \用户\程序\供应商\原则\ ORM \ LIB \原则\ ORM \ EntityRepository.php 第67行
任何想法?
答案 0 :(得分:0)
基本问题是你的getData类扩展了EntityRepository,它(如错误消息所示)期望它的构造函数中有一些参数。
如果您决定使用原始查询,请将连接注入getData类
class GetData
{
public function __construct($conn)
{
$this->conn = $conn;
// In your controller
$getData = new GetData($this->getEntityManager()->getConnection());
您可以更进一步,将GetData定义为服务:
cerad_app_cerad.persons.export_xml:
class: Cerad\Bundle\AppCeradBundle\Services\Persons\Persons01ExportXML
arguments:
- '@doctrine.dbal.default_connection'
// In your controller
$getData = $this->get('cerad_app_cerad.persons.export_xml');
顺便说一下,DBAL连接对象有一些很好的方便方法:
$rows = $this->conn->fetchAll('SELECT * FROM cms');
答案 1 :(得分:0)
问题是你正在使用EntityRepository,但你不应该直接访问你在EntityRepository中定义的方法,就像你在这里一样:
$fetchData = new getData;
$fetchData->getInfo();
您必须通过任何“getData”的“父”来访问该方法。
例如,如果您有一个名为Data的实体:
/**
* @ORM\Entity(repositoryClass="namespace\yourbundle\Entity\getData")
*/
class Data {
/** your setters and getters **/
}
然后您可以通过以下方式访问控制器中的getData方法:
$em = $this->getDoctrine()->getEntityManager();
$getData = $em->getRepository('YourBundle:Data')->getData();
确保在控制器顶部包含实体存储库的路径:
use Namespace\YourBundle\Entity\GetData;
否则,您可能会收到错误(取决于您的symfony版本)。
在您的示例中,您的名称空间似乎被称为Destination
,而您的包名称为AppBundle
,
然后@ORM\Entity
注释应如下所示:
/**
* @ORM\Entity(repositoryClass="Destination\AppBundle\Model\getData")
*/
阅读symfony2文档的这一部分,他们详细阐述了这个主题:
http://symfony.com/doc/current/book/doctrine.html#custom-repository-classes