我需要从数据库中的 product_name
列中以我的表单中的选项列表生成一个选项列表。我在刀片模板中这样做:
<select name="product" >
<option value="" disabled>Click to select</option>
@foreach ($products as $product)
<option value="{{$product->product_name}}">{{$product->product_name}}</option>
@endforeach
</select>
,控制器如下:
public function index()
{
$products = Product::all();
return view('products.index', compact('products'));
}
到目前为止,这已经运行良好,但是随着产品范围的增长,我的数据库中有越来越多的product_name
行,因为每一行的描述都是唯一的,而不是其名称。因此,我的形式有一些重复的选项。
我知道Laravel有一种unique()
收集方法。在这种情况下,在@foreach
的每次迭代中,我都会获得一个字符串作为选项,因此不能使用unique()
。
Laravel中还有哪些其他方法可以过滤重复的数据?
您可以为产品名称和产品说明列进行查询,然后获取结果 -
public function index()
{
$products = Product::select('product_name', 'product_description')
->orderBy('product_name')
->groupBy('product_name', 'product_description')
->get();
return view('products.index', compact('products'));
}
用订单更新了查询。
尝试使用pluck;
public function index()
{
//Use pluck for selecting only specific column. You can take multiple columns as
well.
$product_names = Product::pluck('product_name');
$products = array_unique($product_names);
return view('products.index', compact('products'));
}
public function index()
{
$products = Product::pluck('product_name', 'product_name')
->toArray();
return view('products.index', compact('products'));
}
将返回唯一的产品名称