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

Symfony2如何查找以指定字符开头的记录?,symfony,doctrine-orm,Symfony,Doctrine Orm,如何查找以指定字符开头的记录 例如:只有用户名以A开头的用户 用户类 <?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 Us

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

例如:只有用户名以A开头的用户

用户类

    <?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
    }
这就是我所拥有的一切。这给了我错误

试图调用的名为“getEntityManager”的未定义方法 类DemoBundle\Controller\DefaultController“


使用querybuilder
类似于
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();

嗨@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 profiler栏中单击并转到“数据库”部分。查看生成的查询并尝试直接在数据库上运行它。

我完全不知道您的代码是什么样子,所以我只是给了您一个基本的解决方案。您没有说明它给了您什么错误,因此很难帮助您。您应该提供更多信息如果您希望他人帮助您,请单击此处。对于querybuilder,映射可能是
用户名
中的映射,也可能是
用户名
,因为我不知道您的实体是如何映射的,也不知道您的实体包含哪些属性。因此,请根据您的喜好进行调整或提供更多信息以获得进一步帮助。我为您添加了一个新的答案r解决方案在controller类中,要获取EntityManager,您需要调用
$this->getDoctrine()->>getManager()
,而不是
$this->getEntityManager()
。更改它并重试。谢谢,它可以工作。但查询返回null。在数据库中,我有大约4k个随机用户。
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
}