2016-11-25 10 views
-1

指定された文字で始まるレコードの検索方法は?例えばSymfony2指定された文字で始まるレコードを見つけるには?

:ユーザ名が解@Kwidoで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 
    } 

とコントローラのアクションで始まるユーザーのみ

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)); 
} 

これは私が持っているものすべてです。これは、エラー私に与える

querybuilder教義のLike exprの クラスDemoBundle \コントローラ\ DefaultController」

+0

EntityManagerを取得するコントローラクラスでは、 '$ this-> getEntityManager()'の代わりに '$ this-> getDoctrine() - > getManager()'を呼び出す必要があります。それを変更して、やり直してください。 – 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

使用の "getEntityManagerを" という名前の未定義のメソッドを呼び出そうとしました:

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

リポジトリクラス内でLikeという表現を使用するには:

+0

私はあなたのコードがどのように見えるか全く分かりませんでしたので、私はちょうどあなたに基本的な解決策を与えました。あなたはそれがあなたに与えたエラーを述べていないので、あなたを助けることは本当に難しいです。人々があなたを助けてくれるようにするには、より多くの情報を提供する必要があります。クエリビルダについては、 'userName'のようなマッピングが' username'である可能性があります。私はあなたのエンティティがどのようにマップされているのかわかりませんし、あなたのエンティティにどのプロパティが含まれているのかわかりません。だからあなたの好みに合わせて調整するか、さらなる支援のためにさらに情報を提供してください。 – Kwido

+0

私はあなたの解決策に新しい答えを追加しました –

関連する問題