【发布时间】:2021-09-09 00:04:04
【问题描述】:
我有一个像这样的用户模型和users 表。
此外,我还有一个verification_reminders 表。
first_reminder 和 second_reminder 字段可以为空。
当用户注册时,会在users 表中插入一条记录,并带有一个null email_verified_at 字段。当他们验证他们的电子邮件时,该字段会填充时间戳。如果他们在没有验证电子邮件的情况下花费太长时间,则会向他们发送提醒。当提醒第一次发出时,一条记录被插入到verification_reminders 表中,first_reminder 填充了时间戳。
如果他们仍然没有验证最后的最终提醒是否已发送,并且second_reminder 字段会填充时间戳。
我需要运行一个查询来选择在users 表中具有null email_verified_at 的用户。
接下来我需要将用户分成两个列表/集合:
- 在
users表中有nullemail_verified_at但在verification_reminders表中没有他们的users_id记录的用户不会被提醒。 - 首先提醒的用户在
users表中有nullemail_verified_at并且在verification_reminders表中记录了他们的user_id,其中填充了first_reminder字段但nullsecond_reminder
我的尝试
$users = User::whereNull('email_verified_at')->get();
$users_not_reminded = collect($users)->filter(function($item){
$reminded = DB::table('verification_reminders')->where('user_id', $item->id)->whereNull('first_reminder')->whereNull('second_reminder');
if($reminded->isEmpty()){
return $item;
}
});
我能够检索到 $users 但 $users_not_reminded 抛出错误 Call to undefined method Illuminate\Database\Query\Builder::isEmpty()
我什至还没有开始使用$users_first_reminded。我不确定如何继续,因为这个查询对我来说有点太复杂了。我希望有经验的人可以为我指出实现这一目标的更清洁的方法。
谢谢你。顺便说一句,我正在使用 laravel 8。
【问题讨论】:
-
这里没什么复杂的。
isEmpty()不是有效的方法。请改用if (!$reminded->exists())。
标签: mysql laravel eloquent laravel-8