Symfony-传递一个ids数组



我编写了一个带有函数的 api,该函数通过传递通知的 id 将通知设置为已读。

而且,应该有一个选项可以在那里传递 id 数组,一次将几个标记为已读。我应该扩展函数,以便它处理$this>data['id']是一个数组的情况。

这是正确的方法吗?

我的服务:

 public function read($id = []){
 $notification = $this->getRepository()->findBy([
        'id' => $id
    ]);
    if($notification) {
       $notification[0]->setRead(new DateTime());
       $this->em->flush();
    }
}

我的控制器:

public function readAction()
{
    $this->requirePostParams(['id']);
    $this->get('app')->read(
        $this->data['id']
    );
    return $this->success();
}

你确实可以将一个id值数组传递给DoctrineORMEntityRepository::findBy();例如:

$notifications = $this->getRepository()->findBy([
    'id' => [1, 2, 3] // etc.
]);

但是,由于findBy()可以返回多个结果,因此它将返回一个数组(或类似数组的对象,如 DoctrineORMPersistentCollection (。因此,应循环访问结果集:

foreach ($notifications as $notification) {
    $notification->setRead(new DateTime());
}
$this->em->flush();

此外,这在某种程度上是一个品味问题,但您可能希望使您的 API 更加明确,并为单个操作与组操作创建单独的方法;例如:

public function read(int $id)
{
    //in this scenario you are searching for one notification
    // only so you can use `findOneBy()` instead
    $notification = $this->getRepository()->findOneBy(['id' => $id]);
    $notification->setRead(new DateTime());
    $this->em->flush();
}
public function readMany(array $ids)
{
    $notification = $this->getRepository()->findBy(['id' => $ids]);
    foreach ($notifications as $notification) {
        $notification->setRead(new DateTime());
    }
    $this->em->flush();
}

正如@Yoshi所指出的,read()也可以整齐地实现为:

public function read(int $id)
{
    $this->readMany([$id]);
}

希望这对:)有所帮助

相关内容

  • 没有找到相关文章

最新更新