使用Laravel 5.1从下拉列表选择框中获取所选值的ID

时间:2015-12-28 07:36:31

标签: eloquent laravel-5.1 html-select laravel-routing laravel-blade

我已经有一段时间了,我想做的是从选择框中获取所选值的id。使用这个片段,它没有得到id,我想知道为什么。我很困惑什么可能是错的

此代码用于获取所选值的id:

private static function compareCompany(ProductRequest $productRequest){
            $companyPicked = $productRequest->companyname;
            $listedCompanies = Company::where('user_id', '=', Auth::user()->id);
            $companies = new Company;
            if($companies->user_id === Auth::user()->id)
            {   
                foreach($listedCompanies as $company) {
                    if($company->companyname === $companyPicked)
                    {
                        return $company->id;
                    } 
                }
            }
        }

这是使用为公司返回的ID创建新产品

public function store(ProductRequest $productRequest)
    {
       $product = new Product;
        $company = new Company;
       if($productRequest->isMethod('post')){

       $product->user_id     = Auth::user()->id;
       $product->company_id  = $this->compareCompany($productRequest);
       $product->companyname = $productRequest->companyname;
       $product->productname = $productRequest->productname;

       $product->save();
       return redirect()->route('companyindex')->with('message', 'Your question has been posted.');
       }else{
            return redirect('company-create')->withErrors($productRequest)->withInput();
        }
    }

这是观点:

<p>{!! Form::select('companyname', array('' => 'Select a Company') + $listCompanies) !!} </p>

这是将返回值绑定到视图时使用的代码:

public function create()
    {

      $listCompanies = Company::where('user_id', '=', Auth::user()->id)->orderBy('companyname', 'desc')->lists('companyname', 'companyname')->toArray();
        return view('product.create')
        ->with('listCompanies', $listCompanies);
    }

2 个答案:

答案 0 :(得分:0)

我怀疑问题出在你的compareCompany方法上。那里有几个问题。

这是你的代码(清理了一下):

private static function compareCompany(ProductRequest $productRequest)
{
    $companyPicked = $productRequest->companyname;

    $listedCompanies = Company::where('user_id', '=', Auth::user()->id);

    $companies = new Company;

    if($companies->user_id === Auth::user()->id)
    {   
        foreach($listedCompanies as $company) {
            if($company->companyname === $companyPicked)
            {
                return $company->id;
            } 
        }
    }
}

以下是问题:

  1. $listedCompanies = Company::where('user_id', '=', Auth::user()->id);

    此声明实际上并未生成公司列表。您最后需要添加->get(),如下所示:

  2. $listedCompanies = Company::where('user_id', '=', Auth::user()->id)->get();

    1. $companies = new Company;

      这将创建Company模型的新的未初始化实例。在下一行,您将继续检查该实例的user_id属性,但它没有设置为任何内容,因为它是全新的。所以第一个if()语句总是失败。我不清楚你在这里做了什么,所以我不确定如何解决这个问题。我的猜测是,您只是尝试过滤掉属于当前用户的公司,但您已经使用Company::where(...)->get()完成了这项操作,因此这不是必需的。

答案 1 :(得分:0)

->lists('companyname', 'companyname')更改为->lists('companyname', 'id')

它将返回id模型表的Company