выбрать все строки и мягко удаленные строки, которые были удалены до даты поиска - PullRequest
0 голосов
/ 29 сентября 2018

поэтому для примера у меня есть таблица артикулов

+---------+----------------+------------+
| 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       |
+------+------+------------+

, поэтому я хочу вернуть всю статью, опубликованную (create_at) на 2018-01-01, тогда он вернет все записи, подобные этой

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

, и теперь, если я тоже не хочувключите статью от пользователя, у которого уже было значение delete_at до или равно 2018-01-01, тогда он вернет

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

будет показывать только статью, в которой пользователь имеет нулевое значение удаленного_для ... но не знает, как сопоставить удаленный пользователь с датой поиска

1 Ответ

0 голосов
/ 29 сентября 2018

Попробуйте это:

$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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...