#php #laravel #eloquent #laravel-5.7
#php #laravel #красноречивый #laravel-5.7
Вопрос:
если у меня есть две записи с одинаковым идентификатором premium, я хочу получить только одну запись с максимальной датой вступления в силу. Ниже приведены примеры записей
Я пробовал использовать
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.