Laravel如何从数据库获取纯邮箱值数组用于邮件群发
解决Laravel查询邮箱数组无法直接用于Mail::to()的问题
嘿,我完全懂你的困扰——用get()或者toArray()拿到的结果总是带键名,没法直接传给邮件发送的to()方法对吧?别担心,Laravel其实提供了非常简洁的方法来搞定这个问题。
最直接的解决方案:使用pluck()方法
pluck()就是专门用来提取数据库表中某一列所有值的工具,刚好能生成你需要的纯值数组。修改你的查询语句如下:
$owners = DB::table('users') ->where('active', 1) ->where('userType', 1) ->pluck('email') ->toArray();
这样$owners就会变成你想要的格式:
['myoneemail@esomething.com', 'myother@esomething.com','myother2@esomething.com']
更简洁的用法:直接传递Collection
其实Laravel的Mail::to()方法本身就支持接收Collection对象,所以你甚至可以省略toArray()这一步,直接把pluck()的结果传进去:
$owners = DB::table('users') ->where('active', 1) ->where('userType', 1) ->pluck('email'); Mail::send('email-view', $data, function($message) use ($owners) { $message->to($owners)->subject('你的邮件主题'); // 其他邮件配置... });
为什么之前的方法不行?
get()返回的是包含stdClass对象(或Eloquent模型)的Collection,每个对象里包含email属性;toArray()只是把这些对象转成关联数组,每个元素还是带'email'键的数组,自然没法直接给to()用。
而pluck('email')会直接把所有email字段的值提取出来,生成一个只包含邮箱字符串的Collection,转成数组就是纯值数组啦。
内容的提问来源于stack exchange,提问作者user3242861
相关产品推荐
相关产品推荐

