Laravel:如何使用where语句中的值填充刀片SELECT

时间:2013-07-28 23:12:58

标签: php laravel laravel-4

我知道您可以将值发送到这样的select语句:

控制器:

$client = Client::lists('name', 'id');
return View::make('index', compact('client'));

并在我看来填充这个:

查看:

{{ Form::select('client_id', $client, Input::old('client_id')) }}

但是,如何仅填充group_id = 1的客户端中的记录。

我试过了:

$client = Client::lists('name', 'id')->where('group_id', 1)->get();

$client = Client::lists('name', 'id')->where('group_id','=', 1)->get();

但它似乎没有那样工作,并给我错误“调用成员函数where()在非对象上”

关于如何使其发挥作用的任何想法?

6 个答案:

答案 0 :(得分:10)

控制器:

$client = Client::where('group_id', 1)->pluck('name', 'id');

查看:

{!! Form::select('client_id', $client, Input::old('client_id'), ['class'=> 'form-control'])  !!}

结果:

<select id="client_id" class="form-control" name="client_id">
  <option value="1">John</option>
  <option value="2">Karen</option>
</select>

答案 1 :(得分:9)

必须最后调用lists()

$client = Client::where('group_id','=', 1)->lists('name','id');

答案 2 :(得分:8)

我找到了一个对我有用的答案:

使用流利而不是雄辩,这看起来像这样:

$client = DB::table('clients')->where('group_id', 1)->lists('name');
return View::make('index', compact('client'));

然后在你的视图中,只需将其称为刀片形式标签:

{{ Form::select('client_id', $client, Input::old('client_id')) }}

@KyleK,谢谢你试图提供帮助。

答案 3 :(得分:6)

这也会起作用

Client::where('group_id','=', 1)->lists('name');

答案 4 :(得分:1)

不确定这是否是拼写错误,但您没有正确检索,

这一行应该是......

    $client = Client::lists('name', 'id')->where('group_id','=', 1)->get();

另外....

有时在填充列表时,你会获得模型,并且很容易传递它们,但有时你会得到数组(流畅,原始等),在这种情况下你必须手动访问,并用HTML构建表单,因为你必须以不同方式访问它。

答案 5 :(得分:0)

如果您更喜欢使用Laravel的查询生成器(例如出于性能原因):

$clients = DB::table('clients')->get()->pluck('name', 'id')->toArray();
return view('index', compact('clients'));

或者用select仅拉出所需的内容:

$clients = DB::table('clients')->select('name', 'id')->get()->pluck('name', 'id')->toArray();
return view('index', compact('clients'));

您认为:

{!! Form::label('client_id', 'Client') !!}
{!! Form::select('client_id', $clients, old('client_id')) !!}