【发布时间】: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/laravel/eloquent 的东西,而专注于 sql。考虑到这一点,请参阅Why should I provide an MCVE for what seems to me to be a very simple SQL query
标签: php mysql laravel eloquent