在 Symfony 中传递数据数组
Passing array of data in Symfony
我在数据库中有我的通知 table,我正在其中设置用户的所有阅读通知。
目前,此函数仅接收一个 id,但是,应该有一个选项可以将 id 数组传递到那里,以便同时将多个 id 标记为已读。我需要扩展这个函数,以便它处理 $this>data['id'] 是 array.
的情况
我该如何解决?
我的代码:
public function readNotification(User $user, $notificationId)
{
$notification = $this->getNotificationRepository()->findOneBy([
'user' => $user,
'id' => $notificationId
]);
if($notification) {
$notification->setRead(new \DateTime());
$this->em->flush();
}
}
我的控制器:
$this->requirePostParams(['id']);
$this->get('app.service')->readNotification(
$this->data['user'],
$this->data['id']
);
return $this->success();
在现实生活中,获取所有通知并使用 flush
保存每个通知是一种非常糟糕的方法。假设您的情况应该更新 1K 或更多通知。这将导致 1K 更新查询。我建议您创建一个独特的 UPDATE
查询并在单个查询中更新所有相关项目:
UPDATE `tableName` SET `read` = NOW() WHERE id IN (id1, id2, ....)
id1, id2 ...
是您要更新的 ID 列表。
在您的函数中,您可以执行以下操作:
public function readNotification(User $user, $notificationIds)
{
if (!is_array($notificationIds)) {
$notificationIds = [$notificationIds];
}
// other code
}
我在数据库中有我的通知 table,我正在其中设置用户的所有阅读通知。
目前,此函数仅接收一个 id,但是,应该有一个选项可以将 id 数组传递到那里,以便同时将多个 id 标记为已读。我需要扩展这个函数,以便它处理 $this>data['id'] 是 array.
的情况我该如何解决?
我的代码:
public function readNotification(User $user, $notificationId)
{
$notification = $this->getNotificationRepository()->findOneBy([
'user' => $user,
'id' => $notificationId
]);
if($notification) {
$notification->setRead(new \DateTime());
$this->em->flush();
}
}
我的控制器:
$this->requirePostParams(['id']);
$this->get('app.service')->readNotification(
$this->data['user'],
$this->data['id']
);
return $this->success();
在现实生活中,获取所有通知并使用 flush
保存每个通知是一种非常糟糕的方法。假设您的情况应该更新 1K 或更多通知。这将导致 1K 更新查询。我建议您创建一个独特的 UPDATE
查询并在单个查询中更新所有相关项目:
UPDATE `tableName` SET `read` = NOW() WHERE id IN (id1, id2, ....)
id1, id2 ...
是您要更新的 ID 列表。
在您的函数中,您可以执行以下操作:
public function readNotification(User $user, $notificationIds)
{
if (!is_array($notificationIds)) {
$notificationIds = [$notificationIds];
}
// other code
}