假设:
如何过滤那些已经收到新闻的人(通过Eloquent查询或数据库中的select命令。)
实际上我在基于Laravel 4的项目中遇到了这个问题,我在数据透视表上使用Laravel Eloquent搜索查询,并跟踪发送给用户的电子邮件。
在我的情况下,有两个模型:帖子和用户
它有多对多关系:任何用户都可以收到很多帖子,任何帖子都可以发送给很多用户
答案 0 :(得分:1)
您需要在users
表格中添加一列,例如名为datetime
的{{1}}字段。然后在您的电子邮件或注册方法(无论您发送第一封电子邮件的哪个位置)更新用户,并通过电子邮件发送mailed_at
。
从那时起,您可以根据datetime
查询仍需要电子邮件的用户。
要检查需要简报的多个用户,请假设您的用户表架构如下(保持简单):
mailed_at
我们在此处检查用户是否通过基于mailed_at列的查询收到了电子邮件。要获得需要接收邮件的所有用户,您需要执行以下操作:
id | email | password | mailed_at (nullable)
答案 1 :(得分:0)
有两种型号:发布和用户
它有多对多关系:任何用户都可以收到很多帖子,任何帖子都可以发送给很多用户
我将其实现如下:
class Post extends Eloquent {
public function recipients()
{
return $this->belongsToMany('User', 'posts_users', 'post_id', 'user_id');
}
}
class User extends Eloquent {
public function mails()
{
return $this->belongsToMany('Post', 'posts_users', 'user_id', 'post_id');
}
}
所以,当我想向用户发送帖子时我会使用
$usersToMail = User::whereNotExists(function($query) use ($post_id)
{
$query->select(DB::raw(1))
->from('posts_users')
->whereRaw('posts_users.user_id = users.id')
->whereRaw('posts_users.post_id = '.$post_id);
})->get();
foreach ($usersToMail as $user)
{
// send email
$user->mails()->save($post); // it records that this post has been sent to the user
}