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);
}
我已经为一组特定的管理员用户设置了一个组,他们需要在发布新内容时得到通知。为了便于讨论,我们称这个组为'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);
}