Php beetwen expr不';我不工作

Php beetwen expr不';我不工作,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我的查询的问题是,我的结果总是返回数据库中的每条记录。我试图想出一个不同的解决办法,但没有成功。我在寻找一些建议。如果你需要更多的信息,请告诉我 User.php /** *@ORM\Column(type=“integer”) *@ORM\Id *@ORM\GeneratedValue(strategy=“AUTO”) */ 受保护的$id; /** *@ORM\Column(type=“string”,length=25,unique=true) * *@Assert\NotBlank(

我的查询的问题是,我的结果总是返回数据库中的每条记录。我试图想出一个不同的解决办法,但没有成功。我在寻找一些建议。如果你需要更多的信息,请告诉我

User.php

/**
*@ORM\Column(type=“integer”)
*@ORM\Id
*@ORM\GeneratedValue(strategy=“AUTO”)
*/
受保护的$id;
/**
*@ORM\Column(type=“string”,length=25,unique=true)
*
*@Assert\NotBlank(
*message=“Nie podałeśnazwy użytkownika”
* )
*@Assert\Length(
*最小值=3,
*minMessage=“Twoja nazwa użytkownika powinna składaćsięz minimum{limit}znaków”,
* )
*/
受保护的$username;
/**
*@ORM\Column(type=“string”,length=64)
*@Assert\NotBlank(
*message=“Nie podałeśhasła”
* )
*@Assert\Length(
*最小=6,
*minMessage=“Twoje拥有{{{limit}}znaków最小值”,
* )
*/
受保护的$密码;
/**
*@ORM\Column(type=“string”,length=60,unique=true)
*@Assert\NotBlank(
*message=“Nie podałeśadresu电子邮件”
* )
*@Assert\Email(
*message=“Wprowadzony adres email jest nieprawidłowy”
* )
*/
受保护的$电子邮件;
/**
*@ORM\Column(name=“enabled”,type=“boolean”)
*/
启用受保护的$;
/**
*@ORM\Column(type=“string”,length=64)
*/
受保护的$confirmationToken;
/**
*@ORM\Column(type=“integer”)
*/
受保护的$time;
/**
*@ORM\Column(type=“datetime”,nullable=true)
*/
受保护的$lastLogin;
/**
*@ORM\Column(type=“boolean”)
*/
受保护的$locked;
/**
*@ORM\Column(type=“boolean”)
*/
受保护美元到期;
受保护的$expiresAt;
受保护的$Credentials已过期;
受保护的$credentialsfireat;
/**
*@ORM\Column(type=“boolean”)
*/
受保护的$firstLogin;
/**
*@ORM\Column(type=“datetime”,nullable=true)
*/
受保护的$passwordRequestedAt;
/**
*@ORM\OneToOne(targetEntity=“Profile”,orphanRemoving=true,inversedBy=“user”)
*/
受保护的$profile

Profile.php
/**
*@var整数
*
*@ORM\Column(name=“id”,type=“integer”)
*@ORM\Id
*@ORM\GeneratedValue(strategy=“AUTO”)
*/
私人$id;
/**
*@var字符串
*
*@ORM\Column(name=“streamid”,type=“string”,length=255,nullable=true)
*/
私人$steamID;
/**
*@var字符串
*
*@ORM\Column(name=“name”,type=“string”,length=255,nullable=true)
*/
私人$name;
/**
*@var字符串
*
*@ORM\Column(name=“name”,type=“string”,length=255,nullable=true)
*/
私人姓氏;
/**
*@var字符串
*
*@ORM\Column(name=“rank”,type=“integer”,nullable=true)
*/
私人$rank;
/**
*@ORM\OneToOne(targetEntity=“User”,mappedBy=“profile”)
*/
私人用户

请尝试以下方法:

$qb = $em->createQueryBuilder();

$qb->select('u')
   ->from('AppBundle:User','u')
   ->join('AppBundle:Profile', 'p')
   ->add(
       'where', 
       $qb->expr()
          ->between(
              'p.rank',
              ':min',
              ':max'
          )
   )
   ->andWhere('u.id != :id')
   ->setParameters(array('min' => $minimumRank, 'max' => $maximumRank, 'id' => $user->getId()));

   $query = $qb->getQuery();
   $players = $query->getResult();
$qb=$em->createQueryBuilder()
->选择('u')
->from('AppBundle:User','u')
->leftJoin('u.profile','p')
->其中('u.id!=:id')
->andWhere('p.rank>:min')
->andWhere('p.rank<:max')
->设置参数([
“min”=>$minimumRank,
“最大”=>$maximumRank,
'id'=>$user->getId()
])
->getQuery();
$players=$qb->getResult();

希望它能帮助您

看起来问题在于连接本身。。它在
ON
子句中有您的
WHERE
条件,并且没有
a0_u.id=a1_u.user_id
(或者您的联接列是什么)

我可以发誓,QB表单EntityManager做了一些魔术,为您算出了连接条件,但似乎不是这样,因为您没有指定它将在何处条件中滚动。请尝试以下操作:

$qb = $em->createQueryBuilder()
    ->select('u')
    ->from('AppBundle:User','u')
    ->leftJoin('u.profile', 'p')
    ->where('u.id != :id')
    ->andWhere('p.rank > :min') 
    ->andWhere('p.rank < :max') 
    ->setParameters([
        'min' => $minimumRank, 
        'max' => $maximumRank, 
        'id'  => $user->getId()
    ])
   ->getQuery();

$players = $qb->getResult();

您是否查看过如何将查询编译为SQL(
$qb->getQuery()->>getSql()
)或DQL(
$qb->getDql()
)?我要做的第一件事就是确保这些是你所期望的。如果它们看起来正确,则检查您作为参数传递的值。
string'选择a0_uu.id作为id0,a0_u.username作为username1,a0_uu.password作为password2,a0_u.email作为email3,a0_u.enabled作为enabled4,a0_u.confirmation作为confirmation_u令牌5,a0_u.time作为time6,a0_u.last_u登录作为last_u登录7,a0_u.locked作为locked 8,a0.过期为过期9,a0.首次登录为首次登录10,a0.请求密码为密码为请求密码为11,a0.配置文件为配置文件id为配置文件id12,来自应用程序用户a0.内部加入应用程序配置文件a1.ON((a1.排名介于?和?之间)和a0.id之间)(长度=480)
值不会错误地传递IIRC这些方法不会打印查询中的值,只有占位符(无论您使用的是命名还是位置占位符,始终为
)。看起来问题在于连接本身。。它在
ON
子句中有你的
WHERE
条件,并且没有
a0_u.id=a1_u.user_uid
(或者你的连接列是什么)。那么我能用它做什么呢?你试过使用leftjoin吗?我在这个方向编辑我的帖子。
->join('AppBundle:Profile','p','ON','u.id=p.user\u id')
错误:预期的条令\ORM\Query\Lexer::T_WITH,got'ON'Hmmm这很奇怪。。。请尝试常量
\doctor\ORM\QueryExpr\Join::ON
如果出现相同问题,请尝试将
'与
一起使用。命名空间
\doctor\ORM\QueryExpr\Join::ON
不存在我的C&P中缺少斜杠<代码>\doctor\ORM\Query\Expr\Join::ON
。但我不认为这会起作用。。。先用
试试
。我认为可能on是误导性的,它不是人们所想的。它是否应该看起来像join('AppBundle:Profile','p WITH u.id=p.id')
$qb->select('u')
    ->from('AppBundle:User', u)
    // changed to use the entity's property on User
    ->join('u.profile', 'p')
    ->where($qb->expr()->between(
        'p.rank',
        ':min',
        ':max'
    ))
    ->andWhere('u.id != :id')
    ->setParameters(array('min' => $minimumRank, 'max' => $maximumRank, 'id' => $user->getId()));