2016-11-25 36 views
-1

如何查找以指定字符开头的记录?Symfony2如何查找以指定字符开头的记录?

例如:只有在用户名开始与A

User类

<?php 

    namespace DemoBundle\Entity; 

    use FOS\UserBundle\Model\User as BaseUser; 
    use Doctrine\ORM\Mapping as ORM; 

    /** 
    * @ORM\Entity 
    * @ORM\Table(name="fos_user") 
    */ 
    class User extends BaseUser 
    { 

     /** 
     * @ORM\Id 
     * @ORM\Column(type="integer") 
     * @ORM\GeneratedValue(strategy="AUTO") 
     */ 
     protected $id; 

     /** 
     * @ORM\Column(type="string", length=50) 
     */ 
     protected $name; 

     /** 
     * @ORM\Column(type="string", length=50) 
     */ 
     protected $lastname; 

     public function __construct() 
     { 
      parent::__construct(); 
      // your own logic 
     } 
    //getters and setters 
    } 

和控制器的行动解决方案@Kwido

public function listAction($letter) 
    { 
     $queryBuilder = $this->getEntityManager()->createQueryBuilder(); 
     $queryBuilder 
      ->select(['user']) 
      ->from(User::class, 'user') 
      ->andWhere($queryBuilder->expr()->like('user.lastname', ':lastname')) 
      ->setParameter('lastname', $queryBuilder->expr()->literal('A%')); 

     $result = $queryBuilder->getQuery()->getResult(); 

     die(var_dump($result)); 
} 

这个用户是所有我有什么。这给我的错误

试图调用名为 “getEntityManager” 类DemoBundle \控制器\ DefaultController”

+0

在获得EntityManager的控制器类中,您需要调用'$ this-> getDoctrine() - > getManager()'而不是'$ this-> getEntityManager()'。改变它,然后再试一次。 – rogeriolino

+0

谢谢,它的工作原理。但查询返回null。在数据库中,我有大约4k个随机用户。 –

回答

1

嗨@Damian将您的代码更改为它。

public function listAction($letter) 
{ 
    $result = $this->getDoctrine() 
        ->getManager() 
        ->createQueryBuilder() 
        ->select('u') 
        ->from(User::class, 'u') 
        ->where('u.lastname LIKE :lastname') 
        ->setParameter('lastname', 'A%') 
        ->getQuery() 
        ->getResult(); 

    dump($result); 

    // return response bellow 
} 

当页面加载时,单击Symfony分析器栏并转到数据库部分。查看生成的查询并尝试直接在数据库上运行它。

+0

作品非常棒!谢谢! –

0

使用一个未定义的方法的QueryBuilder的Like EXPR学说:

// Example - $qb->expr()->like('u.firstname', $qb->expr()->literal('Gui%')) 
public function like($x, $y); // Returns Expr\Comparison instance 

要在您的存储库中使用Like存储库类:

// getEntityManager() = $this->getDoctrine()->getManager(); 
$queryBuilder = $this->getEntityManager()->createQueryBuilder(); 
$queryBuilder 
    ->select(['user']) 
    ->from(User::class, 'user') 
    ->andWhere($queryBuilder->expr()->like('user.userName', ':userName')) 
    ->setParameter('userName', $queryBuilder->expr()->literal('A%')); 

$result = $queryBuilder->getQuery()->getResult(); 
+0

我完全不知道你的代码是怎么样的,所以我只是给了你一个基本的解决方案。你不会说出它给你的错误,所以很难帮助你。如果你希望人们帮助你,你应该提供更多的信息。至于querybuilder的映射可能是'userName',可能是'username',因为我不知道你的实体是如何映射的,不知道你的实体包含哪些属性。因此可以根据自己的喜好进行调整或提供更多信息以获得进一步的帮助。 – Kwido

+0

我为您的解决方案添加了一个新的答案 –

相关问题