Laravel在下拉列表中从DB下拉多个值

时间:2015-01-23 22:38:48

标签: php laravel

在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>

我想知道我是否可以在某些方面显示db中的其他值,例如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>

这样的事情可能吗?

3 个答案:

答案 0 :(得分:2)

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

$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>

答案 1 :(得分:2)

这里有几个选项。

您可以直接在SQL中执行此操作。这将保持服务器的一切,不会占用任何内存或时间建立模型。

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

但是,如果您的逻辑稍微复杂一些,或者您正在寻找更多“Laravel-ish”解决方案,则可以在Project模型上创建一个存取方法。使用此方法,您最终在调用lists方法之前创建所有模型:

// 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访问者的文档是here

答案 2 :(得分:-1)

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;
    }