2016-11-25 3 views
-1

Wie finde ich Datensätze, die mit einem bestimmten Zeichen beginnen?Symfony2 Wie finde ich Datensätze, die mit einem bestimmten Zeichen beginnen?

zum Beispiel: nur Benutzer, wo Benutzernamen mit dem

<?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 
    } 

und Controller-Aktion mit Lösung @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)); 
} 

all

Benutzerklasse

A beginnt, ist, was ich habe. Dies gibt mir Fehler

Versuchte eine nicht definierte Methode "getEntityManager" von Klasse DemoBundle \ Controllers \ default“

+0

In der Controller-Klasse, um EntityManager zu erhalten, müssen Sie '$ this-> getDoctrine() -> getManager()' anstelle von '$ this-> getEntityManager()' aufrufen. Geändert und es erneut versuchen. – rogeriolino

+0

Danke, es funktioniert. Aber die Abfrage gibt null zurück. In der Datenbank habe ich ungefähr 4k zufällige Benutzer. –

Antwort

1

Hallo @Damian ändern Sie Ihren Code dazu.

Wenn die Seite geladen ist, klicken Sie in die Symfony-Profilleiste und gehen Sie zum Datenbankbereich. Suchen Sie die generierte Abfrage und versuchen Sie, sie direkt in der Datenbank auszuführen.

+0

funktioniert ausgezeichnet! Danke! –

0

Verwenden Sie den Querybuilder Like ausdr der Lehre genannt zu nennen:

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

Um den Ausdruck Like in Ihrem Repository Klasse zu verwenden:

// 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

Ich habe absolut keine Ahnung, wie Ihr Code aussieht, also habe ich Ihnen einfach eine grundlegende Lösung gegeben. Sie geben nicht an, welchen Fehler es gab, also ist es wirklich schwer, Ihnen zu helfen. Sie sollten mehr Informationen bereitstellen, wenn Sie möchten, dass die Leute Ihnen helfen. Wie für den Querybuilder könnte das Mapping sein, da in 'userName'' username' sein könnte, da ich keine Ahnung habe, wie Ihre Entity gemappt ist und welche Eigenschaften Ihre Entity nicht enthält. Also optimieren Sie es nach Ihren Wünschen oder geben Sie weitere Informationen für weitere Unterstützung. – Kwido

+0

Ich habe eine neue Antwort zu Ihrer Lösung hinzugefügt –

Verwandte Themen