【问题标题】:October CMS - send mail to members of backend group十月 CMS - 向后端组的成员发送邮件
【发布时间】:2019-06-28 13:33:07
【问题描述】:

我为一组特定的管理员用户设置了一个组,当新内容发布时需要通知他们。为了争论,我们称这个组为“notify-admins”。

我有这段代码,取自 (​​Users and Permissions) 的十月文档

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

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

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

【问题讨论】:

    标签: octobercms octobercms-backend


    【解决方案1】:

    我很想知道您在哪里编写此代码?我假设一个插件注册文件?

    这里有两个答案。 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;
    }
    

    这给了我一个错误,因为它找不到 UserGroup 类。我不得不补充:

    使用 \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;

    【讨论】:

    • 谢谢,这真的很有帮助 - 所以我按照建议做了,但我现在收到“尝试获取非对象的属性”错误。我正在使用从另一家公司继承的网站,他们构建了一个非常广泛的插件,扩展了很多十月的功能,我正在根据客户的要求添加一些新东西。代码正在插件文件夹内的观察者中添加。本质上,当内容被保存时,它会作为“已保存”观察者的一部分触发此邮件功能。我是 October 和 Laravel 的新手,所以事实证明它的学习曲线有点陡峭。
    • @Hill79 你没有复制粘贴我放的东西而不改变“notify-admin”??我敢打赌它会抛出“试图获取非对象的属性”错误,因为UserGroup::where('code', 'notify-admin')->first() 正在返回 null。所以你不能调用->users,因为 null 不是一个对象。
    • 不,我更改了代码以满足我的需要。我现在找到了解决方案 - 我会发布更新
    【解决方案2】:

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

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

    然后发送电子邮件...

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-07
      • 1970-01-01
      • 2018-06-14
      • 2017-09-07
      • 2018-02-28
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      相关资源
      最近更新 更多