October CMS - 向后端组成员发送邮件

October CMS - send mail to members of backend group

我已经为一组特定的管理员用户设置了一个组,他们需要在发布新内容时得到通知。为了便于讨论,我们称这个组为'notify-admins'。

我有这段代码,取自 (​​Users and Permissions)

的 10 月文档
Mail::sendTo(UserGroup::where('code', 'notify-admins')->get()->users, 'mailTemplate', $data);

但是,这会抛出 Property [users] does not exist on this collection instance 很明显我做错了什么!

我需要做的就是向组中的所有成员弹出一封电子邮件 - 最好的方法是什么?

我很想知道你在哪里写这段代码?我假设一个插件注册文件?

这里有两个答案供您参考。 where() 方法实际上返回一组集合,其中 'code' 是 'notify-admin'。在一个更好的例子中,一件商品的价格是 200 美元;您可以拥有多件 200 美元的商品。如果您想访问集合中的 users 属性,您必须创建一个 foreach 循环(或 for 循环)或调用 first() 方法。

在您的情况下,我认为您可以像这样 $backend = UserGroup::where('code', 'notify-admin')->first()->users; 调用 first() 方法并尝试执行邮件发送。我没有测试执行电子邮件部分,因为那是另一个问题。

这里有一些诊断问题的技巧以及我是如何得到答案的。提示#1 不要将自己限制在公式中。我创建了一个 CMS 页面,并在其中放置了给我错误的代码部分:

function onStart() {
    $this['backend'] = UserGroup::where('code', 'moderator')->get()->users;
}

这给了我一个错误,因为它找不到用户组 class。我必须添加:

使用\Backend\Models\UserGroup;

接下来它给了我你收到的错误。提示#2 了解您正在使用的对象。所以我删除了 ->users 以查看仅使用 ->get() 得到了什么。事实证明它是一个模型集合,其中 'code' = 'notify-admin'。好吧,这导致我添加 first():

$backend = UserGroup::where('code', 'notify-admin')->get()->first()->users;

或者这个也行

$backend = UserGroup::where('code', 'notify-admin')->first()->users;

所以,我的做法是错误的。我不需要查询用户组,而是需要查看作为组成员的用户。这是我最终用于 select 目标组中的用户然后迭代他们弹出电子邮件的代码。

$admins = User::whereHas('groups', function($query) {
   $query->where('code', 'notify-admins');
})->get();

然后发送电子邮件...

foreach ($admins as $admin) {
    Mail::sendTo($admin->email, mailTemplate, $data);
}