Laravel - 填充选择的optgroup下拉列表,按名称

时间:2015-08-24 17:59:12

标签: php mysql laravel-4

我正在尝试填充Laravel中的select下拉列表以显示产品的属性。

<select>
  @foreach($attributes as $key=>$attr)    
  <optgroup label="{{$attr->name}}">
    <option value="{{$attr->value}}">{{$attr->value}}</option>
  </optgroup>
  @endforeach
</select>

当用户存储属性的数据时,他可以存储Color: Red with id=1Color: Blue with id=2

用于获取数据的查询是:

$attributes = Attribute::orderBy('name', 'ASC')->get();

虽然,我需要根据他们的名字找到类似的记录,比如Colorselect下拉列表应在$attr->name列出<optgroup label>一次,$attr->value中应重复<option value>

我尝试更改查询并使用groupBy,但这不会按预期工作。查询将仅返回忽略其余记录的任何记录的第一个实例。

$attributes = Attribute::orderBy('name', 'ASC')->groupBy('name')->get();

我该如何解决这个问题?提前谢谢。

1 个答案:

答案 0 :(得分:3)

我会将所有属性放入一个多维数组中,然后迭代生成选择。

// Fetch all attributes
$results = Attribute::orderBy('name', 'ASC')->get();
$attributes = array();
/**
 *  Group results into a multidimensional array like:
 *  [color]
 *      [red]
 *      [white]
 *  [shape]
 *      [circle]
 *      [square]
 */
foreach ( $results as $v ) {
    if ( !isset($attributes[$v->name]) ) {
        $attributes[$v->name] = array();
    }
    $attributes[$v->name][$v->value] = $v->value;
}
// Spit out the select/option groups
?>
<select>
      @foreach ( $attributes as $key => $attr )    
      <optgroup label="{{$key}}">
        @foreach ( $attr as $values )
            <option value="{{$value}}">{{$value}}</option>
        @endforeach
      </optgroup>
      @endforeach
</select>