Cara mengambil semua id user yang membuat komentar pada forum (laravel)

saya sedang membuat notifikasi untuk komentar pada forum. saya ingin ketika user A membuat komentar pada topik maka user B, C, dll yang membuat komentar pada topik yg sama menerima notifikasi bahwa user A telah mengomentari topik yang diikuti oleh user B,C,.... akan tetapi saya mengalami kendala untuk mengmbil id dari semua user yg berkomentar. Saya coba melakukan foreach untuk semua komentar, tapi masalahnya ketika user B atau C sudah membuat lebih dari 1 komentar notifikasinya d terkirim sebanyak jumlah komentar user tersebut.

foreach($post->comments as $comment){
    if($user != $comment->user_id && $post_owner != $comment->user_id){
         Notification::create([
             'user_id' => $comment->user_id, //target notif di kirim
             'post_id' => $post_id,
             'commenter_id' => $user,
             'message' => 'pesan notif',
             'status'  => '1'
        ]);
     }
 }
avatar Supriono

@Supriono

80 Kontribusi 11 Poin


Jawaban Terpilih

kalau maksudnya cuman pengen ngasih sekali notif ya cukup 1 baris aja di tambahin.
break

di dalam if nya sesudah bikin notification.

Edit:
Memang gak perlu menggunakan break.
Inti nya ingin memberi notification ke user selain diri nya kan?
Ada banyak cara
//Dengan membuat variabel tambahan bwt nyimpen
$been_notified = []
foreach($post->comments as $comment){ 
  if($user != $comment->user_id && $post_owner != $comment->user_id){ 
    if(!isset($been_notified[$comment->user_id])){
      $been_notified[$comment->user_id] = true;
      Notification::create([
      ..
      .
  
 
// Atau disaring terlebih dahulu. Bisa pake foreach, array_filter, atau array_unique
// Disini nyontohin pake array_unique dengan array_column
foreach(array_unique( array_column($post->comments, 'user_id') ) as $user_id ){
   if($user != $user_id){
     Notification::create([ 
     .. 
     .


avatar GrennKren

@GrennKren

60 Kontribusi 44 Poin

Jawaban

kalau maksudnya cuman pengen ngasih sekali notif ya cukup 1 baris aja di tambahin.
break

di dalam if nya sesudah bikin notification.

Edit:
Memang gak perlu menggunakan break.
Inti nya ingin memberi notification ke user selain diri nya kan?
Ada banyak cara
//Dengan membuat variabel tambahan bwt nyimpen
$been_notified = []
foreach($post->comments as $comment){ 
  if($user != $comment->user_id && $post_owner != $comment->user_id){ 
    if(!isset($been_notified[$comment->user_id])){
      $been_notified[$comment->user_id] = true;
      Notification::create([
      ..
      .
  
 
// Atau disaring terlebih dahulu. Bisa pake foreach, array_filter, atau array_unique
// Disini nyontohin pake array_unique dengan array_column
foreach(array_unique( array_column($post->comments, 'user_id') ) as $user_id ){
   if($user != $user_id){
     Notification::create([ 
     .. 
     .


avatar GrennKren

@GrennKren

60 Kontribusi 44 Poin

  • maksud saya masing2 user yang berkomentar mendapat 1 notif mas, kalo pake break berarti proses perulangannya berhenti ketika kondisi if terpenuhi dong? saya belum coba sih - @Supriono
  • Kalau gitu liat jawaban ku yg kuedit - @GrennKren
  • thanks mas.. - @Supriono


Login untuk gabung berdiskusi