繁体   English   中英

Laravel从数据库中下拉多个值

[英]Laravel drop down multiple values from DB in drop down

在Laravel下拉列表中,是否可以在下拉列表中包含多个值?

通常,您将编写这样的命令来获取名称和选择框的ID。

Project::where('project_id', '=', Session::get('project_id'))->lists('project_name', 'id');

它将像这样下降

<select>
<option value="13">12345</option>
<option value="16">14-100</option>
<option value="17">14-200</option>
<option value="31">987</option>
</select>

我想知道是否可以显示它在数据库中显示的另一个值,例如created_by,所以它看起来像这样。

<select class="form-control" name="project">
<option value="13">12345 Billy user</option>
<option value="16">14-100 Sally user</option>
<option value="17">14-200 Thomas user</option>
<option value="31">987 Lola user</option>
</select>

这样的事情可能吗?

您可以在控制器中获得所需的字段:

$projects = Project::where('project_id', '=', Session::get('project_id'))->get('id', 'project_name', 'created_by');

然后将其传递给视图:

return View::make('my.view', array('projects' => $projects)) ;

您可以在此处手动创建选项标签:

<select class="form-control" name="project">
@foreach($projects as $project)
    <option value="{{ $project->id }}">{{ $project->project_name }} {{ $project->created_by }}</option>
@endforeach
</select>

这里有几个选项。

您可以直接在SQL中进行操作。 这将保留服务器端的所有内容,并且不会占用任何内存或时间来构建模型。

Project::where('project_id', '=', Session::get('project_id'))
    ->lists(DB::raw('CONCAT(project_name, " ", created_by)'), 'id');

但是,如果您的逻辑稍微复杂一些,或者您正在寻找更“ Laravel式”的解决方案,则可以在Project模型上创建访问器方法。 使用此方法,最终将在调用list方法之前创建所有模型:

// model
class Project extends Eloquent {
    // accessor method to provide 'name_by' attribute
    public function getNameByAttribute() {
        return $this->project_name . ' ' . $this->created_by;
    }
}

// if you limit the select, make sure you at least select the fields you need
$projects = Project::select('id', 'project_name', 'created_by')
    ->where('project_id', '=', Session::get('project_id'))
    ->get();
// call lists on the Collection of models, which will allow use of the accessor
$projectList = $projects->lists('name_by', 'id');

如果您有兴趣,Laravel访问器的文档在这里

public static function tableListToDropDown($tableName='',$nameField='',$idField='')
    {
        if ($idField == null)
        {
            $idField = "id";    
        }

        $listFiledValues = DB::table($tableName)->select($idField,$nameField)->get();
        $selectArray=[];
        foreach ($listFiledValues as $listFiledValue)
        {
            $selectArray[$listFiledValue->$idField] = $listFiledValue->$nameField;
        }

        return $selectArray;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM