Php 如何打印实体的单个值而不转储整个对象?

Php 如何打印实体的单个值而不转储整个对象?,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我想从实体中得到一个值。这里有人能帮我吗。 这是我的密码。请告诉我这里缺少什么 $query = $em->createQuery("SELECT e FROM AdminBundle:MailTemplates e WHERE e.keyword = '" .$keywordVal."'"); $query->execute(); $result = $query->getResult(); echo $result ->getId(); 这里我需要“id”。在加

我想从实体中得到一个值。这里有人能帮我吗。 这是我的密码。请告诉我这里缺少什么

$query = $em->createQuery("SELECT e FROM AdminBundle:MailTemplates e  WHERE e.keyword = '" .$keywordVal."'");
$query->execute();
$result = $query->getResult();
echo $result ->getId(); 

这里我需要“id”。

在加载实体时尝试此操作,而不是创建自己的查询 在存储库中加载实体

$rep = $this->getDoctrine()->getManager()->getRepository("Bundlename:Entity");

//find one by keyword -> single entity
$entity = $rep->findOneBy(array('keyword' => $keyword));

//find all by keyword - Array of entities 
$result = $rep->findBy(array('keyword' => $keyword));
这一点在如何做到这一点中有所说明

因此,根据您的代码,这将成为:

$query = $em->createQuery("SELECT e.id FROM AdminBundle:MailTemplates e WHERE e.keyword = ?1");
$query->setParameter(1, $keywordVal);
$query->execute();
$result = $query->getResult(); // array of MailTemplates ids 

注意:我还使用了,而不是直接在查询中设置值。

使用查询生成器,您可以

$queryBuilder = $em->createQueryBuilder('e');

$queryBuilder
    ->select('e.yourColumn')
    // This will return just this column
    // Alternatively you could omit any select to return the whole object
    // that you could then use like $object->getYourColumn() if you so chose

    ->where($queryBuilder->expr()->eq('e.keyword', ':keyword'))
    ->setParameter('keyword', $keyword)
;

return $queryBuilder
    ->getQuery()
    ->getResult();
在控制器中:

$this->get('database_connection')->fetchColumn('select id from mail_templates where...');

如果您不想与查询生成器和其他类似的东西打交道,那么这对性能来说会更好,也会更容易。

中选择e.columnName……旁注:不要粘贴查询,看看tom关于如何将参数与不变查询文本一起使用的答案,或者更好,避免使用SQL/DQL,对于这种简单的情况,使用标准的
findBy*()
方法。您不应该担心从数据库中取回整个实体,只要没有各种KB的数据,性能就不会受到太大影响。取而代之的是,把重点放在安全性上,这显然是你的代码中缺少的。我认为你的答案没有抓住要点。OP只想检索实体的一个字段(即列)。问题不在于如何搜索/过滤实体。