Doctrine findBy UUID 数组

问题描述 投票:0回答:1

我在 Symfony 应用程序中使用 Doctrine 通过 UUID 检索用户时遇到问题,经过几个小时的努力却没有任何真正的线索,我决定在这里提出这个问题,以防我错过了一些明显的东西。

问题:
我有一个 Symfony 应用程序,其中用户由 UUID 标识。我尝试使用 Doctrine 的 findBy 方法从 UUID 列表中检索用户,但即使 UUID 存在于数据库中,我也会系统地得到一个空数组。

这是我的 $id 字段:

trait UuidTrait
{
    #[ORM\Id]
    #[ORM\Column(type: UuidType::NAME, unique: true)]
    #[ORM\GeneratedValue(strategy: 'CUSTOM')]
    #[ORM\CustomIdGenerator(class: 'doctrine.uuid_generator')]
    private ?Uuid $id = null;

    public function getId(): ?Uuid
    {
        return $this->id;
    }
}

我的用于检索用户的代码:

$ids = ["018dd095-4c15-78b4-8f45-6c0bdc78368e","018dd226-5561-7b24-8677-64fa33a0267b"];
$users = $userRepository->findBy(["id" => $ids]); // -> empty array

我尝试使用以下方法将字符串转换为 UUID:

$ids = array_map(fn (string $id) => Uuid::fromString($id), $ids);

但还是没成功...

我检查了我的 ID:

$users = $userRepository->findBy(["id" => $ids[0]]);

$users 包含 1 个用户,所以我的 ID 很好。

最糟糕的是没有抛出任何错误,所以我不知道问题出在哪里。我见过几个人使用数组作为标准参数(here),所以我认为它可以工作。

预先感谢任何可以帮助我的人。

地理

编辑:在学说文档中看到this,我的代码看起来是正确的

php database symfony doctrine uuid
1个回答
0
投票

Doctrine 似乎无法一次处理所有 UUID 列表。因此,我想出了一个解决方案来处理这种情况。希望它对您有用!

public function fetchByUuids(array $uuids){

    $qb = $this->createQueryBuilder('m');
    $expr = $qb->expr()->orX();
    foreach ($uuids as $key => $uuid) {
        $paramName = 'id_' . $key;
        $expr->add($qb->expr()->eq('m.id', ':' . $paramName));
        $qb->setParameter($paramName, $uuid, UuidType::NAME);
    }

    $qb->andWhere($expr);

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

#[Route(path: '/home', name: 'home', methods: ['GET'])]
public function home(MoviesRepository $subscriberRepository)
{

    $ids = ['0188324d-103f-79dc-b313-fe8f85b9aaf4','0188324d-103f-79dc-b313-fe8f8adb328c'];
    dd($subscriberRepository->fetchByUuids($ids));


}

© www.soinside.com 2019 - 2024. All rights reserved.