【问题标题】:Laravel: how to populate a blade SELECT with values from a where statementLaravel:如何使用 where 语句中的值填充刀片 SELECT
【发布时间】:2013-07-28 15:30:15
【问题描述】:

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

控制器:

$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()”

关于如何使它工作的任何想法?

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

    如果你更喜欢使用 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')) !!}
    

    【讨论】:

      【解决方案2】:

      控制器:

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

      【讨论】:

      • lists 已弃用,现在使用 pluck
      【解决方案3】:

      这也行

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

      【讨论】:

        【解决方案4】:

        lists() 必须最后调用

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

        【讨论】:

        • lists() 现在已弃用。阿德里安的答案更好。
        【解决方案5】:

        我找到了一个适合我的答案:

        使用 fluent 而不是 eloquent,看起来像这样:

        $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,感谢您的帮助。

        【讨论】:

        • 直接按名称调用表不是一个坏习惯吗?
        • 是的,应该是这里用的模型吧。
        • 另外lists() 现在已被弃用。阿德里安的答案更好。
        【解决方案6】:

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

        这一行应该是……

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

        还有……

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

        【讨论】:

        • 您好,感谢您的回答 - 我在“调用非对象上的成员函数 where()”时遇到错误,您知道为什么会这样吗?它正在发出你上面建议的路线。
        • @kylek 如果我有 id 数组而不是它不工作。 ('group_id','=', $ids) 这里,$id 包含[1,2,3,]。怎么办?
        猜你喜欢
        • 2015-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-02
        • 2021-06-30
        • 2019-01-05
        • 2011-09-19
        • 2013-10-10
        相关资源
        最近更新 更多