Я пытаюсь получить уникальные значения в раскрывающемся списке. Код для выпадающего:
@foreach($admin_bills as $admin_bill)
<?php $month = date('M, Y', strtotime($admin_bill->created_at)); ?>
<option value="{{ $admin_bill->id }}">{{ $month }}</option>
@endforeach
Это дает мне все значения, основанные на created_at
, Например, если есть несколько записей в одном месяце, это дает мне такие результаты, как
Aug, 2017
Aug, 2017
Aug, 2017
Sep, 2017
Sep, 2017
Но если в одном месяце несколько записей, я хочу, чтобы они отображались один раз в раскрывающемся списке. Так что результат будет такой:
Aug, 2017
Sep, 2017
Я не могу просто использовать функцию вроде array_unique()
здесь и $admin_bill->id
должен получить первый идентификатор уникального $month
, Как я могу это сделать? Пожалуйста помоги. Я использую Laravel 5.4
Спасибо.
Рекомендуется решить это в контроллере. Не в поле зрения. В контроллере вы можете написать что-то вроде следующего:
$admin_bills->pluck('created_at')->map->format('M, Y')->distinct();
Я не проверял это, но я думаю, что это приведет вас в правильном направлении.
Я предполагаю, что created_at
свойство автоматически анализируется для объекта углерода. Потому что так работает Ларавел.
Если вы переместите эту логику в контроллер, вы можете сделать это с помощью простого цикла:
$uniques = [];
foreach ($admin_bills as $bills) {
$month = date('M, Y', strtotime($bills->created_at));
if (!in_array($month, $uniques)) {
$uniques[] = [
'date' => $month,
'id' => $bills->id
];
}
}
// Useage
foreach ($uniques as $v) {
$v['id']
$v['date']
}
Попробуйте отформатировать его в вашем контроллере:
$admin_bills_formated = $admin_bills->map(function ($item, $key) {
$item->month = Carbon::parse($item->created_at)->month;
return $item;
});
$admin_bills_grouped = admin_bills_formated->groupBy('month');
Предполагая ваш admin_bills
переменная является коллекцией и created_at
поле является Carbon
пример.
В вашем контроллере
$adminBillUniqueMonths = $adminBills->unique(function($bill) {
$bill->created_at->format('Ym');
});
и по вашему мнению
@foreach($adminBillUniqueMonths as $bill)
<option value="{{ $bill->id }}">{{ $bill->created_at->format('M, Y') }}</option>
@endforeach