Я использую этот код http://codegains.com/2014/06/laravel-4-notification-system/
для моей системы уведомлений все работает нормально. Но теперь я столкнулся с проблемами, пользователи наводнены уведомлениями.
Я имею в виду, что если 5 пользователям нравится одно изображение, автор этого изображения получит 5 уведомлений с «Пользователю X понравилась ваша картинка image.png». Где Х это 5 разных названий.
Теперь я хочу знать, есть ли у кого-нибудь идеи о том, как это сделать, чтобы в приведенном выше случае пользователь получал только 1 уведомление о том, что «пользователям X, Y, Z понравилась ваша картинка image.png».
Редактировать:
Вот структура таблиц «Уведомления»
http://codegains.com/wp-content/uploads/2014/06/notifications-2.png
Теперь я пытаюсь сгруппировать уведомления с повторением всех уведомлений, которые выбраны из БД с ORDER BY object_id, и я сравниваю текущий object_id с предыдущим, и поэтому я получаю правильную форму. Но это занимает много времени, потому что он запускается при каждой загрузке страницы (главная страница). И 1000 пользователей, с 1000 уведомлений …: \
Попробуйте сгруппировать с created_at
,
Вы проверите для created_at
в течение 30 секунд, сгруппируйте результаты и сгенерируйте каждое уведомление, превышающее 30 секунд, в противном случае вы сгруппируете и сгенерируете группу.
Например:
$oNotifications = Notifications::where('is_read', '=', false)->get();
$aNotifyGroup = [];
foreach($oNotifications as $oNotify)
{
if($oNotify->created_at->diffInSeconds(Carbon::now()) <= 30)
{
// Add to group for later fire
$aNotifiyGroup[] = $oNotify;
}
else
{
//Fire notification
}
}
//Fire Grouped notification
foreach($aNotifyGroup as $oNotify)
{
//Fire
}
Других решений пока нет …