为了账号安全,请及时绑定邮箱和手机立即绑定

有人可以建议一种使用 Doctrine (QueryBuilder) 和多个“where”

有人可以建议一种使用 Doctrine (QueryBuilder) 和多个“where”

PHP
守候你守候我 2023-10-22 21:49:01
我是 QueryBuilder 的新手,我正在尝试执行 POST 请求(使用 JSON)来检索数据库中的一些信息。我使用数组是因为每个属性可以有多个值。这是我当前发送的 JSON:{    "name":["Martin"],    "state":["Ohio", "Texas"],    "job":["Photographer", "Reporter"]}这是我的数据库:ID  |   NAME        |   FIRST_NAME  |   STATE       |   JOB             |   SPEAK_FRENCH1   |   Martin      |   John        |   Ohio        |   Photographer    |   12   |   Martin      |   Max         |   Ohio        |   Reporter        |   13   |   Martin      |   Sophie      |   Texas       |   Model           |   14   |   Alexander   |   David       |   Kansas      |   Author          |   05   |   Archie      |   Kira        |   Maine       |   Photographer    |   16   |   Lushen      |   Albert      |   Nevada      |   Pilot, Model    |   17   |   Wilkins     |   Minnie      |   Utah        |   Tailor          |   08   |   Martin      |   Thomas      |   Texas       |   Reporter        |   19   |   Patino      |   Stephen     |   Virginia    |   Pilot, Reporter |   110  |   Ting        |   Maria       |   Nevada      |   Dentist         |   011  |   Brown       |   Barbara     |   Virginia    |   Reporter        |   112  |   Martin      |   William     |   Texas       |   Photographer    |   113  |   Zachary     |   Thomas      |   Virginia    |   Telephonist     |   1我想要的请求:SELECT * FROM 'application'WHERE SPEAK_FRENCH = 1AND NAME = "Martin"AND STATE = "Ohio"AND JOB LIKE "%Photographer%"OR SPEAK_FRENCH = 1AND NAME = "Martin"AND STATE = "Ohio"AND JOB LIKE "%Reporter%"OR SPEAK_FRENCH = 1AND NAME = "Martin"AND STATE = "Texas"AND JOB LIKE "%Photographer%"OR SPEAK_FRENCH = 1AND NAME = "Martin"AND STATE = "Texas"AND JOB LIKE "%Reporter%"
查看完整描述

2 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

使用 Doctrine 你可以这样做:


    $queryBuilder = $this->createQueryBuilder('request');

    $queryBuilder

        ->andWhere($queryBuilder->expr()->andX(

            $queryBuilder->expr()->eq('user.speakFrench', ':speakFrench'),

            $queryBuilder->expr()->like('request.name', ':name'),

            $queryBuilder->expr()->in('request.state', ':states'),

            $queryBuilder->expr()->in('request.job', ':jobs'),

        ))

        ->setParameter('speakFrench', true)

        ->setParameter('name', 'Martin')

        ->setParameter('states', ['Ohio', 'Texas'])

        ->setParameter('jobs', ['Photographer', 'Reporter'])

        ->getQuery()

        ->getResult();

这应该是一个好的开始。

查看完整回答
反对 回复 2023-10-22
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

以下似乎是符合您要求的有效查询:


SELECT * 

  FROM application

 WHERE SPEAK_FRENCH = 1

    AND NAME = "Martin"

    AND STATE = IN("Ohio","Texas")

    AND (JOB LIKE "%Photographer%" OR JOB LIKE "%Reporter%");


查看完整回答
反对 回复 2023-10-22
  • 2 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信