我有某种条件,如果设置了请求或否,则在视图刀片laravel中像这样重新调谐:
$compare1 = $request->compare1;
$compare2 = $request->compare2;
if (isset($compare1)) {
$laptop1 = Laptop::where('slug', $compare1)->firstOrFail();
return view('compare.index', ['laptop1' => $laptop1->id]);
} elseif(isset($compare2)) {
$laptop2 = Laptop::where('slug', $compare2)->firstOrFail();
return view('compare.index', ['laptop1' => $laptop1->id, 'laptop2' => $laptop2->id]);
}elseif(isset($compare1, $compare)) {
$laptop1 = Laptop::where('slug', $compare1)->firstOrFail();
$laptop2 = Laptop::where('slug', $compare2)->firstOrFail();
return view('compare.index', ['laptop1' => $laptop1->id, 'laptop2' => $laptop2->id]);
}else {
return view('compare.index');
}
如果isset($ compare1,$ compare)运行,找不到$ laptop2,这种情况下有任何解决方案...?之前感谢
您的结构不正确。当前,您的代码elseif(isset($compare1, $compare))
将永远不会执行,因为如果设置了$compare1
或$compare2
,则您的if
语句在到达第三个语句之前已经退出。您也有很多冗余代码(根据执行哪个if
块重复一行代码),可以很容易地减少到更少的行数和更简洁的代码。
考虑这个; (您应该可以用它替换整个if
块)
//set up an empty array to return
$return = [];
//check if `$compare1` is set, and add to return array if it is
if(isset($compare1)) {
$return['laptop1'] = (Laptop::where('slug', $compare1)->firstOrFail())->id;
}
//same as above but for `$compare2`
if(isset($compare2)) {
$return['laptop2'] = (Laptop::where('slug', $compare2)->firstOrFail())->id;
}
return view('compare.index', $return);
如果您仅进行2个比较,这可能有点过大,但肯定有一些好处。
$compare1 = $request->compare1;
等)$comparisons
数组即可轻松为您的回报添加更多比较代码:
//empty array to return
$return = [];
//list of variables to compare
$comparisons = ['compare1', 'compare2'];
//loop through each comparison
foreach($comparisons as $key => $request_object) {
$count = $key + 1; //keys start at 0, so we add 1 to make it count sequentially 1,2,3 ...
$comparison = $request->{$request_object}; //grab your comparison object
//check if comparison object is set, add it to return array if it is
if(isset($comparison)) {
$return["laptop{$count}"] = (Laptop::where('slug', $comparison)->firstOrFail())->id;
}
}
return view('compare.index', $return);
也许最好将代码分成几部分以提高代码质量。
分析代码后的一些想法:
view('compare.index')
has
方法laptop1Id
或类似名称>if($request->has('compare1')) { $laptop1 = Laptop::where('slug', $request->get('compare1'))->firstOrFail(); } if($request->has('compare2')) { $laptop2 = Laptop::where('slug', $request->get('compare2'))->firstOrFail(); } return view('compare.index', compact('laptop1', 'laptop2'));
如果查找/搜索
Laptop
是域规则,则可以将其封装在模型的方法/范围中,进行类似查询:
$laptop = Laptop::findOrFailBySlug($val);
$laptop = Laptop::slug($val)->firstOrFail();