首页 > 解决方案 > Doctrine querybuilder 不适用于我在 PHP 中的 SQL 语句

问题描述

请原谅我,我对编程很陌生。

基本上,我正在尝试运行 SQL 语句而不使其容易受到 SQL 注入的影响

我尝试运行我的代码,但这里有问题:

$manager = this->getDoctrine()->getManager();
$builder = $manager->getRepository('AppBundle:User')->createQueryBuilder('u');
$builder->select('*')
        ->from('home_users', 'u')
        ->where(u.username LIKE :pattern');
$query = $builders->getQuery();
$query->setParameter('pattern', "%pattern%");
$users = $query->getResult();

我正在尝试在本指南中使用 Doctrine QueryBuilder:https ://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/query-builder.html

任何帮助都感激不尽

标签: phpsymfonydoctrine-query

解决方案


  • 为您的解决方案

    $pattern ="You pattern her";
    
    $manager      = this->getDoctrine()->getManager();
    $userRepo     = $manager->getRepository('AppBundle:User');
    $queryBuilder = $userRepo->createQueryBuilder('u');
    
    $queryBuilder->select('u')
          ->where('u.username LIKE :pattern')
          ->setParameter('pattern', '%'.$pattern.'%');
    
    $users = $queryBuilder->getQuery()->getResult();
    
  • 你可以对 Evolution Reutilisation 、 Clean code 和 Best practice做一点改进

  1. 在用户存储库中

     public function findUsersLikePattern(string $pattern = null)
     {
         $queryBuilder = $this->createQueryBuilder('u')
                               ->select('u');
    
         if ($pattern) {
             $queryBuilder
                 ->where('u.username LIKE :pattern')
                 ->setParameter('pattern', '%' . $pattern . '%');
    
         }
    
         return $queryBuilder->getQuery()->getResult();
    
     }
    
  2. 在控制器中

     $pattern ="You pattern her";
    
     $manager    = this->getDoctrine()->getManager();
     $users     = $manager->getRepository('AppBundle:User')->findUsersLikePattern($pattern);
    

推荐阅读