【问题标题】:Symfony 3 Doctrine How to build query without columns index suffixSymfony 3 Doctrine 如何构建没有列索引后缀的查询
【发布时间】:2015-12-03 19:53:18
【问题描述】:

我的表格如下:product_id->name,description,price

我想检索所有产品,所以这是我检索产品的代码

    $doc = $this->getDoctrine();
    $em = $doc->getEntityManager();
    $conn = $em->getConnection();
    $repo = $doc->getRepository('AppBundle:Products');
    $query = $repo->createQueryBuilder('p')->getQuery();
    $sql = $query->getSql();
    $stmt = $conn->prepare($sql);
    $stmt->execute();
    $products = $stmt->fetchAll(\PDO::FETCH_ASSOC);

问题是在构建查询时,它总是在列名之后添加列索引后缀作为别名

所以结果会是这样的:

[
    {"product_id_0":"1","name_1":"Name1","description_2":"Desc1","price_3":"100"},
    {"product_id_0":"2","name_1":"Name2","description_2":"Desc2","price_3":"200"}
]

请注意,它们在列名之后是 _0、_1 之类的后缀,我不想要它, 如何构建没有这样别名的查询?

【问题讨论】:

标签: doctrine-orm doctrine symfony


【解决方案1】:

您已经有了一个存储库。

当您拥有存储库时,您无需创建原始 SQL 查询,甚至无需使用已创建的查询。让 Doctrine 来处理(这是 DBAL,Doctrine 的数据库抽象层)。

改为使用findAll()findBy() 之类的方法来获取对象。

例子:

$repo = $doc->getRepository('AppBundle:Products');
$results = $repo -> findAll();

// Returns array(Product, Product, ...), which should be mapped to an entity
// so that you can use $product -> getName() or whatever you need.

您还可以创建查询以获取数组结果:

$results = $repo -> createQueryBuilder('p') -> getQuery() -> getArrayResult();

文档:http://symfony.com/doc/current/book/doctrine.html

【讨论】:

  • 谢谢,我还有一个问题......如果我想获得我定义的真实列,比如 product_id 而不是 productId 我该怎么做?
猜你喜欢
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
相关资源
最近更新 更多