选择所有行和软删除行比被删除之前搜索日期

pn9klfpd  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(546)

因此,对于这个例子,我有一个article表

+---------+----------------+------------+
| user_id |      post      | created_at |
+---------+----------------+------------+
|    0001 | some article   | 2018-01-01 |
|    0002 | other article  | 2018-01-01 |
|    0002 | some2 article  | 2017-10-01 |
|    0003 | some2 article  | 2017-10-01 |
+---------+----------------+------------+

这张table有 belongsTo 与用户表的关系

+------+------+------------+
| id   | name | deleted_at |
+------+------+------------+
| 0001 | yo   | null       |
| 0002 | yea  | 2017-12-31 |
| 0003 | yes  | null       |
+------+------+------------+

所以我想返回所有在2018-01-01发布的文章(创建于),然后它将返回所有这样的记录

+---------+----------------+------------+
| user_id |      post      | created_at |
+---------+----------------+------------+
|    0001 | some article   | 2018-01-01 |
|    0002 | other article  | 2018-01-01 |
+---------+----------------+------------+

现在,如果我也不想包含来自用户的文章,这些文章在2018-01-01之前已经删除了\at value,那么它将返回

+---------+----------------+------------+
| user_id |      post      | created_at |
+---------+----------------+------------+
|    0001 | some article   | 2018-01-01 |
+---------+----------------+------------+

到目前为止,一切都很好,现在我问的另一个问题是,如果我在2017-10-01的文章,那么它应该会回来

+---------+----------------+------------+
| user_id |      post      | created_at |
+---------+----------------+------------+
|    0002 | some2 article  | 2017-10-01 |
|    0003 | some2 article  | 2017-10-01 |
+---------+----------------+------------+

因为当时用户0002还没有被删除 user.deleted_at = 2017-12-31 vs article.created_at = 2017-10-01 所以在那一天它应该被列入名单。
如何在同一个查询中得到这些结果?因此,当我搜索的文章与用户之前没有被删除的搜索日期比它会显示,但当我搜索的文章与用户已被删除后,搜索日期,然后它不会显示。。。
我试过了

$table = Article::leftjoin('user','article.user_id','user.id')
->where('created_at',$search_date)
->whereNull('user.deleted_at')
->get();

将只显示用户以空值删除了\u的文章。。。但是唐;我不知道如何将用户在中删除的内容与搜索日期匹配

l7wslrjt

l7wslrjt1#

试试这个:

$table = Article::leftjoin('user','article.user_id','user.id')
->where('created_at',$search_date)
->where(function($query) use($search_date) {
    $query->whereNull('user.deleted_at')
        ->orWhere('user.deleted_at', '<', $search_date);
})->get();

相关问题