Sql Symfony 3条令存储库连接和阵列

Sql Symfony 3条令存储库连接和阵列,sql,symfony,doctrine-orm,Sql,Symfony,Doctrine Orm,我正在处理symfony 3,我的存储库中的生成器出现了一些问题 工作原理: 我有一个朋友,他有很多信息,比如名字,游戏等等。。。 和用户通过关系OneTONE链接 我从我的发布实体中向您发送一部分 class Announce { /** * @var int * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO

我正在处理symfony 3,我的存储库中的生成器出现了一些问题

工作原理: 我有一个朋友,他有很多信息,比如名字,游戏等等。。。 和用户通过关系OneTONE链接

我从我的发布实体中向您发送一部分

class Announce
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
      * @ORM\OneToOne(targetEntity="Wolk\UsersBundle\Entity\User")
     * @ORM\JoinColumn(nullable=false)
     */
    private $user;

      /**
     * @var string
     *
     * @ORM\Column(name="game", type="string", length=255)
     */
    private $game;


    Etc...
现在您可以看到我的存储库了

public function byResearch($role, $game, $region, $language, $rank, $gamemode, $matchtype, $platform)
    {

        $qb = $this->createQueryBuilder('u')
                ->select('u');

        if ($language != null) {
                $qb->join('u.user' , 's');
                $qb->addSelect('s');
                $qb->andWhere('s.language like \''.$language.'\'');
        }




        if ($gamemode!= null) {
            $qb->andWhere('u.gamemode = \''.$gamemode.'\'');
        }

        if ($matchtype!= null) {
            $qb->andWhere('u.matchtype = \''.$matchtype.'\'');
        }

        if ($region!= null) {
            $qb->andWhere('u.region = \''.$region.'\'');
        }

        if ($rank!= null) {
            $qb->andWhere('u.rank like \'%'.$rank.'%\'');
        }

        if ($platform!= null) {
            $qb->andWhere('u.platform like \'%'.$platform.'%\'');
        }

        if ($game!= null) {
            $qb->andWhere('u.game = \''.$game.'\'');
        }

        if ($role!= null) {
            foreach($role as $itm1)
            {
                $qb->andWhere('u.role like \'%'.$itm1.'%\'' );
            }
        }
        $qb->andwhere('u.active = :active');
        $qb->setParameter('active', '1');
        $qb->orderBy('u.date', 'DESC');



        return $qb->getQuery()->getResult();

    }
我的问题是关于我的用户的语言

人们将只搜索法语、德语、英语,所有用户的所有语言都在实体用户中

User.Language=Array('fr','en')//诸如此类

事实上,我在我的网站上看到了这个结果(来自profiler)

我真的不知道语言搜索出了什么问题

Join对于一个关系网来说可能是错误的

也许数组的“Where like”不是好的解决方案

一天以来我一直在搜索,不知道哪些东西不起作用,所以我希望你能在这方面帮助我:)


如果您需要更多信息,我们很高兴您忘记在语言值周围添加百分号。应该是:

$qb->andWhere('s.language like \'%'.$language.'%\'');

您忘了在语言值周围添加百分号。应该是:

$qb->andWhere('s.language like \'%'.$language.'%\'');

对不起,我不明白你真正的问题是什么。你能换一种说法吗?如果($language!=null){$qb->join('u.user','s');$qb->addSelect('s');$qb->andWhere('s.language like\'.$language.''''.\''.');}这是我的问题,我在搜索时没有结果,也不知道为什么,例如,我的搜索有fr语言,我的公告有fr语言,我没有结果。我真的不知道为什么抱歉,我不明白你的实际问题是什么。你能换一种说法吗?如果($language!=null){$qb->join('u.user','s');$qb->addSelect('s');$qb->andWhere('s.language like\'.$language.''''.\''.');}这是我的问题,我在搜索时没有结果,也不知道为什么,例如,我的搜索有fr语言,我的公告有fr语言,我没有结果。我真的不知道为什么这么感谢你,我花了这么多时间来解决这个问题;)非常感谢,我花了这么多时间来解决这个问题;)