在刀片模板中生成选项列表时使用unique()方法

时间:2019-03-06 05:54:47

标签: laravel laravel-blade

我需要从数据库中名为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中还有什么其他方法可以过滤重复的数据?

3 个答案:

答案 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'));
}

那将返回唯一的产品名称

相关问题