我已经有一段时间了,我想做的是从选择框中获取所选值的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);
}
答案 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;
}
}
}
}
以下是问题:
$listedCompanies = Company::where('user_id', '=', Auth::user()->id);
此声明实际上并未生成公司列表。您最后需要添加->get()
,如下所示:
$listedCompanies = Company::where('user_id', '=', Auth::user()->id)->get();
$companies = new Company;
这将创建Company
模型的新的未初始化实例。在下一行,您将继续检查该实例的user_id
属性,但它没有设置为任何内容,因为它是全新的。所以第一个if()
语句总是失败。我不清楚你在这里做了什么,所以我不确定如何解决这个问题。我的猜测是,您只是尝试过滤掉属于当前用户的公司,但您已经使用Company::where(...)->get()
完成了这项操作,因此这不是必需的。
答案 1 :(得分:0)
将->lists('companyname', 'companyname')
更改为->lists('companyname', 'id')
它将返回id
模型表的Company
。