【问题标题】:select all row and soft deleted row than been deleted before search date选择搜索日期之前删除的所有行和软删除行
【发布时间】:2018-09-29 14:26:33
【问题描述】:

所以对于这个例子我有这个文章表

+---------+----------------+------------+
| 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关系
+------+------+------------+
| id   | name | deleted_at |
+------+------+------------+
| 0001 | yo   | null       |
| 0002 | yea  | 2017-12-31 |
| 0003 | yes  | null       |
+------+------+------------+

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

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

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

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

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

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

将仅显示用户已删除_at 为空值的文章...但不知道如何将用户已删除_at 与搜索日期匹配

【问题讨论】:

标签: php mysql laravel eloquent


【解决方案1】:

试试这个:

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

【讨论】:

  • 试过了,如果我将 $search_date 设置为 2018-01-01,它根本不会返回任何内容
  • 其实应该是>而不是
猜你喜欢
  • 2021-11-21
  • 2016-07-24
  • 2017-11-24
  • 2018-12-06
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多