如果 id 不在获取参数(字符串)或会话(数组)中,那么我们会按流行度显示所有可用的颜色。如果 get 参数中有一个 id,那么该颜色应该首先出现。如果 get 参数中有 id 并且 session 中有大量 id,那么第一个应该是 get 参数的颜色,然后是 session 数组中的颜色,然后是所有其他颜色。同时,所有的颜色都必须按流行度排序,并且可用。
现在我只检查获取参数的存在。
public function index(Request $request)
{
$colors_ids = $request->session()->get('colors_ids');
$this->validate($request, [
'color' => 'numeric',
]);
$colors = Color::where([['in_stock', '=', '1']])
->orderByRaw(sprintf("CASE id WHEN %d THEN 1 ELSE 2 END", $request->get('color')))
->orderBy("popularity", "desc")
->get();
return view('color.index', compact('colors'));
}
更新
在任何情况下,您都需要显示所有可用的颜色。只是如果 url 有一个 get-parameter,那么这个颜色应该是第一个,不管它的受欢迎程度如何。然后应该有我们从会话中获取其指标的颜色,并且这些颜色应该按受欢迎程度排序并且可用。只有这样,所有其他可用的颜色才会按受欢迎程度排序。
如果我们有一个 get 参数:
- 我们从 get 参数中获取的颜色 ID。它必须可用。
- 其他颜色可选。按人气排序。
如果我们只有会话中的 id 列表:
- 我们从会话中获取 id 的颜色。按人气排序。必须可用。
- 其他颜色可选。按人气排序。
如果我们有一个 get 参数和一个会话中的 id 列表:
- 我们从 get 参数中获取的颜色 ID。它必须可用。
- 我们从会话中获取 id 的颜色。按人气排序。必须可用。
- 其他颜色可选。按人气排序。
如果会话为空且 url 没有 get 参数。
- 所有可用的颜色。按人气排序。
首先,从数据库中取出所有可用的颜色,然后排序: