Область запроса Laravel, получение записи с максимальной датой вступления в силу при том же идентификаторе premium

#php #laravel #eloquent #laravel-5.7

#php #laravel #красноречивый #laravel-5.7

Вопрос:

если у меня есть две записи с одинаковым идентификатором premium, я хочу получить только одну запись с максимальной датой вступления в силу. Ниже приведены примеры записей

ar

Я пробовал использовать

 public function scopeEffectiveDate($query)
    {
        $current_date = Carbon::now()->toDateTimeString();
        return $query->where(max('effective_date'), '<=', $current_date);
    } // shows error
  

и

 public function scopeEffectiveDate($query)
    {
        $current_date = Carbon::now()->toDateTimeString();
        return $query->groupBy('insurance_provider_id')->latest('effective_date')->where('effective_date', '<=', $current_date);
    }
  

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

Комментарии:

1. Вам нужно проверить, что дата вступления в силу не соответствует текущему DateTime?

2. попробуйте этот $query-> groupBy(‘insurance_provider_id’)->latest(‘effective_date’)->where(‘effective_date’, ‘<=’, $current_date) ->distinct(‘column_name’);

3. @SaadSuri effective_date <= $current_date , как указано в вопросе

4. @PrinceKumarDwivedi Я пробовал, это не работает.

Ответ №1:

Проверьте этот код

 public function scopeEffectiveDate($query)
{
    $current_date = Carbon::now()->toDateTimeString();
    return $query->orderBy('effective_date', 'desc')->where('effective_date', '<=', $current_date);
}
  

Комментарии:

1. Я не думаю, что это будет работать так, как если бы он использовал group by effective_date, он может получить тот же insurance_provider с другим effective_date.