Передача массива данных в Symfony - PullRequest
1 голос
/ 13 июня 2019

У меня есть таблица уведомлений в дБ, где я устанавливаю все уведомления о прочтении пользователем.

На данный момент эта функция получает только один идентификатор, но также должна быть возможность передавать туда массив идентификаторов., чтобы отметить сразу несколько как прочитанные.Мне нужно расширить эту функцию, чтобы она обрабатывала случай, когда $ this> data ['id'] является массивом.

Как я могу это исправить?

Мой код:

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();

1 Ответ

0 голосов
/ 13 июня 2019

В реальной жизни очень плохой подход - получать все уведомления и сохранять каждое уведомление с помощью flush.Предположим, в вашем случае вы должны обновить 1K или более уведомлений.Это вызовет 1K запросов на обновление.Я советую вам создать отдельный запрос UPDATE и обновить все связанные элементы в одном запросе:

UPDATE `tableName` SET `read` = NOW() WHERE id IN (id1, id2, ....)

id1, id2 ... - это список идентификаторов, которые вы хотите обновить.

В вашей функции вы можете сделать что-то вроде:

public function readNotification(User $user, $notificationIds)
{
    if (!is_array($notificationIds)) {
        $notificationIds = [$notificationIds];
    }

    // other code

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...