Symfony3 查询搜索功能DQL语句like查询

//前台页面代码   
<form method="GET" action="{{ path('staff_index') }}" name="searchterm"> <label> <input name="searchterm" type="text" value="" placeholder="输入名称" > </label> <input type="submit" value="查询"> </form>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
 * Lists all customer entities.
 *
 * @Route("/", name="staff_index")
 * @Method("GET")
 * @Template()
 */
public function indexAction(Request $request)
{<br>    
    $em = $this->getDoctrine()->getManager();//实体管理
    $searchterm = $request->get('searchterm');//页面参数获取<br>
    $page = $request->query->getInt('page',1);
    $query = $em->getRepository('XinXiBundle:Customer')//实体查询
        ->createQueryBuilder('u');<br>
    if (!null == $searchterm){//如果参数不为空就执行like查询
        $query->where(
            $query->expr()->like('u.name', ':user')
        )
            ->setParameter('user','%'.$searchterm.'%')
            ->getQuery()
            ->getResult();
    }else{
        $query->orderBy('u.id','desc') //否则查询所有列表
        ->getQuery();
    }
 
    $pagination = $this->get('knp_paginator') //分页功能
        ->paginate($query,
            $page,5);
    return [
        'pagination' => $pagination,
    ];
}

 

多个条件查询时使用 andWhere 如下:

复制代码
        $em = $this->getDoctrine()->getManager();
        $searchterm = $request->get('searchterm');
        $page = $request->query->getInt('page',1);
        $query = $em->getRepository('XinXiBundle:Customer')
            ->createQueryBuilder('u');

        if (!null == $searchterm){
            $query
                ->andWhere($query->expr()->like('u.name', ':user'))
                ->andWhere('u.status = :status')
                ->setParameter('status',true)
                ->setParameter('user','%'.$searchterm.'%')
                ->getQuery()
                ->getResult();

        }else{
            $query->orderBy('u.id','desc')
                ->where('u.status = :status')
                ->setParameter('status',true)
            ->getQuery();
        }
复制代码

 

实体关联查询

 

复制代码
  $em = $this->getDoctrine()->getManager();
        $searchterm = $request->get('searchterm');
        $page = $request->query->getInt('page', 1);
        $query = $em->getRepository('XinXiBundle:Finance')
            ->createQueryBuilder('f');
        if (!null == $searchterm) {
            $query
                ->join('f.customer' , 'customer')  //关联实体属性 现在别名为customer
                ->andWhere($query->expr()->like('customer.name', ':name'))//此时再使用customer.属性值进行like查询
                ->andWhere('f.status = :status')
                ->setParameter('status', true)
                ->setParameter('name', '%' . $searchterm . '%')
                ->orderBy('f.id', 'desc')
                ->getQuery()
                ->getResult();
复制代码

 

微信公众号:

 

posted @   ldp.im  阅读(1093)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示