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

时间:2018-09-29 14:26:34

标签: php mysql laravel eloquent

因此,在示例中,我有此文章表

inv

此文章表与用户表

具有+---------+----------------+------------+ | 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 | +---------+----------------+------------+ 关系
belongsTo

所以我想返回2018年1月1日发布的所有文章(created_at),然后它将返回所有这样的记录

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

现在,如果我也不想包括来自用户的文章,而该文章在早于等于2018-01-01之前已经具有delete_at值,则它将返回

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

到目前为止,现在一切正常,我在此问题中提出的另一种情况是,如果我在2017年10月1日参加文章,那么它应该返回

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

因为那时用户0002尚未被+---------+----------------+------------+ | user_id | post | created_at | +---------+----------------+------------+ | 0002 | some2 article | 2017-10-01 | | 0003 | some2 article | 2017-10-01 | +---------+----------------+------------+ 删除,依此类推,因此应该将其包括在列表中。

如何在同一查询中获得这些结果?因此,当我使用在搜索日期之前尚未删除的用户搜索文章时,它将显示出来,但是当我使用在搜索日期之后删除的用户进行搜索时,它将不会显示...

我尝试过

user.deleted_at = 2017-12-31 vs article.created_at = 2017-10-01

将仅显示用户具有Deleted_at空值的文章...但是不知道如何将用户Deleted_at与搜索日期匹配

1 个答案:

答案 0 :(得分:0)

尝试一下:

$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();