Заказ Laravel действует до даты окончания - PullRequest
0 голосов
/ 03 октября 2018

Как мне orderBy дата в laravel / mysql, только если current date находится в пределах / между starts_at и ends_at датами?

Например:

// Suppose Current Date: 2018-10-05

- Example A
  = Starts At: NULL,       Ends At: NULL,       Created At: 2018-10-05
- Example B
  = Starts At: NULL,       Ends At: NULL,       Created At: 2018-10-04
- Example C
  = Starts At: 2018-10-01, Ends At: 2018-10-03, Created At: 2018-10-03
- Example D
  = Starts At: 2018-10-03, Ends At: 2018-10-05, Created At: 2018-10-02
- Example E
  = Starts At: 2018-10-05, Ends At: 2018-10-07, Created At: 2018-10-01
- Example F
  = Starts At: 2018-10-07, Ends At: 2018-10-09, Created At: 2018-09-30

Мой текущий запрос (столбцы starts_at и ends_at):

Example::orderByRaw('if(isnull(starts_at) >= curdate() and isnull(ends_at) <= curdate(), starts_at, created_at) desc');

В результате:

- Example A
- Example B
- Example C
- Example D
- Example E
- Example F

Ожидаемый результат:

- Example E // First because of starts at 2018-10-05 until 2018-10-07
- Example A --
- Example B   |_ // Same order based expired/null
- Example C   |
- Example D --
- Example F // Still last because starts at is in the future

Вот мой sqlfiddle .

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Этот запрос очень выиграл бы от довольно феноменального Laravel Query Buider .

Попробуйте:

Example::where([
    ['ends_at', '>=', Carbon::now()],
    ['starts_at', '<=', Carbon::now()],
    ['ends_at', '!=', null],
    ['starts_at', '!=', null]
])
->orderBy('ends_at','desc')
->get();

Это должно приблизить вас к тому, что вы хотите.В зависимости от типа столбца вашей таблицы может потребоваться немного изменить формат объектов Carbon, чтобы при сравнении не возникла ошибка.

т.е..

Carbon::now()->format('Y-m-d') // 2018-10-04

Это также гарантирует, что строки, где ends_at и starts_at равны null, не отображаются.Наконец, заказы от самых новых до самых старых.

Надеюсь, это поможет!

0 голосов
/ 03 октября 2018

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

Example::orderBy('ends_at','desc')->latest()->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...