在Laravel 5.5中向用户发送通知

时间:2018-02-06 16:59:37

标签: php laravel notifications laravel-5.5

这就是场景。我的用户A通过通知发送给其他用户B,C,D ...加入群组的请求。所以在laravel中我创建了迁移和控制器来处理通知。

这是GroupController的代码

size_impl

所以在... foreach ($userINList as $userIN) { $userIN = str_replace(' ', '', $userIN); $userDBList = User::all(); foreach ($userDBList as $userDB) { $name = $userDB->last_name . $userDB->first_name; $name = str_replace(' ', '', $name); if (strcmp($name, $userIN) == 0) { $newGroup->users()->attach($userDB->id, ['role' => 'member', 'state' => 'pending']); $notification = User::find($userIN->id); $notification->notify(new GroupNotification($newGroup)); } } } ... 我将尝试传递接收邀请的用户的ID,然后我使用notify()方法发送通知,但是在用户A创建了组之后没有用户B,C,D的通知...... 我在组模型中包含了$notification。所以有什么问题?我必须做的事。

由于

1 个答案:

答案 0 :(得分:1)

据我所知,您正在执行以下操作:

  1. $userINList变量
  2. 中有一系列名称
  3. 循环遍历数组中的每个名称
  4. 删除名称中的所有空格
  5. 检索每个User
  6. 遍历每个User
  7. 删除User名称中的所有空格
  8. 比较2个名字
  9. 如果比较过后,您将User添加到论坛并发送通知
  10. 我们可以在这里做出很多改进。例如,我们已经知道您希望通知哪些用户,因此您无需获取和比较所有用户。

    首先,$userINList 要么User个对象的数组,要么是User id的数组 - {{{ 1}}对象更好。然后你可以简单地遍历每一个。

    例如,如果你有一组id,那么你可以这样做:

    User

    如果你有一个对象数组,那就更容易了,你可以这样做:

    $group = Group::find(1);
    $userINList = [1, 2, 3, 4];
    
    User::whereIn('id', $userINList)
        ->get()
        ->each(function ($user) use ($group) {
            $group->users()->attach($user->id, [
              'role' => 'member',
              'state' => 'pending'
            ]);
    
            $user->notify(new GroupNotification($group));
        });
    

    超级简单:-)