我想在下拉列表中获取唯一值。下拉代码是:
@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
的第一个ID。我怎样才能做到这一点?请帮忙。我正在使用Laravel 5.4
谢谢。
答案 0 :(得分:2)
建议您在控制器中解决此问题。不在视图中。在控制器中,您可以编写如下内容:
$admin_bills->pluck('created_at')->map->format('M, Y')->distinct();
我没有对此进行测试,但我认为这会让你朝着正确的方向前进。
我假设created_at
属性被自动解析为碳对象。因为这是Laravel通常的工作方式。
答案 1 :(得分:1)
如果将此逻辑移动到控制器中,则可以通过简单的循环执行此操作:
$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']
}
答案 2 :(得分:0)
尝试在控制器中格式化它:
$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');
答案 3 :(得分:0)
假设您的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