Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用'法查找条令;还是条件';?_Php_Symfony_Doctrine Orm_Doctrine - Fatal编程技术网

Php 用'法查找条令;还是条件';?

Php 用'法查找条令;还是条件';?,php,symfony,doctrine-orm,doctrine,Php,Symfony,Doctrine Orm,Doctrine,是否可以在条令findBy()方法中使用或语句 我希望输出如下: SELECT * FROM `friends` WHERE userId=1 OR FriendId=1 ; 现在的代码是: $user = $repository->findBy(array( 'userId' => $this->getRequest()->getSession()->get('id') ); MongoDB特定语法 您可以在传递给findBy的

是否可以在条令findBy()方法中使用语句

我希望输出如下:

SELECT * FROM `friends` WHERE userId=1 OR FriendId=1 ;
现在的代码是:

$user = $repository->findBy(array(
            'userId' => $this->getRequest()->getSession()->get('id')
    );
MongoDB特定语法 您可以在传递给
findBy
的数组中使用
$或
$和
键:

$id = $this->getRequest()->getSession()->get('id');
$user = $repo->findBy(
    array(
        '$or' => array(
            array('userId' => $id),
            array('FriendId' => $id),
        ),
    );
);
使用QueryBuilder: 但鉴于这是mongoDB特有的,这可能无法回答您的问题。使用queryBuilder,您可以编写以下内容:

$qb = $repository->createQueryBuilder();
$qb->select('f')
    ->from('friends', 'f')//replace friends with the correct entity name
    ->where('f.userId = :uid')
    ->orWhere('f.FriendId = :fid')
    ->setParameter('uid', $id)
    ->setParameter('fid', $id);
$users = $qb->getQuery()->getSingleResult();//or more
您可以使用querybuilder表达式构建
子句,该表达式如下所示:

$qb->where(
        $qb->expr()->orX(
            $qb->expr()->eq('f.userId', ':uid'),
            $qb->expr()->eq('f.FriendId', ':fid')
        )
    )
    ->setParameter('uid', $id)
    ->setParameter('fid', $id);

即使使用相同的值两次,也必须调用
setParameter
两次


最后,还有一些文档

我只会使用DQL。。。向您的存储库中添加如下功能:

public function findFriends($userId)
{
    return $this->getEntityManager()
        ->createQuery('SELECT f FROM Friends WHERE userId = :userId OR FriendId = :userId')
        ->setParameter('userId', $userId)
        ->getOneOrNullResult();
}
或者使用查询生成器而不是DQL:

public function findFriends($userId)
{
    return $this->getEntityManager()
        ->createQueryBuilder()
        ->from('Friends', 'f')
        ->where('f.userId = :userId')
        ->orWhere('f.friendId = :userId')
        ->setParameter('userId', $userId)
        ->getQuery()
        ->getOneOrNullResult();
}
然后使用:

$user = $repository->findFriends($this->getRequest()->getSession()->get('id'));

你试过你的两个问题吗?两者都不起作用。@Cerad:我没有,也没有注意到OP可能没有使用MongoDB这一事实。我已经为我更新了答案:未识别的字段:$或