使用pluck获取唯一值并通过循环将其存储

时间:2019-08-01 14:18:50

标签: php laravel

我正在尝试获取Auth用户的朋友,并通过notifs表通知他们。我有以下查询来获取Auth用户的朋友:

        $usrusrmembs = DB::table('usrusrs')
                    ->where('accepted', 1)
                    ->where('user_id', $u_id) // $u_id is the Auth user = 4
                    ->orwhere('friend_id', $u_id)
                    ->pluck('friend_id', 'user_id');

usrusrs表中的每个友谊都有一行,其中Auth用户可以是user_id或friend_id,具体取决于发送/接收的朋友请求的人。

Vardump($ usrusrmembs)将为1行提供以下内容:array(1) { [5]=> int(4) }

问题是,如果$u_idfriend_id不匹配user_id,则仅通知friend_id,而不会通知user_id

要存储的循环:

                foreach($usrusrmembs as $rec_users){
                      $notifs = new Notif();
                      $notifs->rec_uid = $rec_users;
                      $notifs->send_uid = $u_id;
                      $notifs->send_uname = $u_name;
                      $notifs->data_type = 9;
                      $notifs->data_id = $group_id;
                      $notifs->title = $group_title;

                       $notifs->save();
                   }

1 个答案:

答案 0 :(得分:1)

尝试使用此循环:

foreach($usrusrmembs as $key => $val){

    $rec_users = ($key == $u_id) ? $val : $key;

    $notifs = new Notif();
    $notifs->rec_uid = $rec_users;
    $notifs->send_uid = $u_id;
    $notifs->send_uname = $u_name;
    $notifs->data_type = 9;
    $notifs->data_id = $group_id;
    $notifs->title = $group_title;

    $notifs->save();
}

在两个字段中使用pluck(),您将得到一个关联数组,其中key为user_id,value为friend_id。您解释了Auth user可能在键或值中处于打开状态,并且您想通知其他用户。

因此,数组的前向循环键和值($key=>$value部分),如果$key$u_id,则选择要通知的$value,相反选择$key以得到通知。