我需要从数据库中名为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中还有什么其他方法可以过滤重复的数据?
答案 0 :(得分:0)
您可以将查询分组为产品名称和产品描述列,并按以下方式获取结果-
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'));
}
按查询顺序更新查询。
答案 1 :(得分:0)
尝试使用采摘;
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'));
}
答案 2 :(得分:0)
public function index()
{
$products = Product::pluck('product_name', 'product_name')
->toArray();
return view('products.index', compact('products'));
}
那将返回唯一的产品名称