{ "title": "Laravel 和 Rails 商品列表页面的实现:搜索、排序和分页", "description": "本文比较了 Laravel 和 Rails 框架中实现商品列表页面的方法,包括搜索、排序和分页功能。两个框架都提供了简洁高效的代码实现,为开发者提供了灵活的解决方案。", "keywords": "Laravel, Rails, 商品列表页, 搜索, 排序, 分页", "content": ""public function index(Request $request)\n{\n\t// 创建一个查询构造器\n\t$builder = Product::query()->where('on_sale', true);\n\t// 判断是否有提交 search 参数,如果有就赋值给 $search 变量\n\t// search 参数用来模糊搜索商品\n\tif ($search = $request->input('search', '')) {\n\t\t$like = '%'.$search.'%';\n\t\t// 模糊搜索商品标题、商品详情、SKU 标题、SKU描述\n\t\t$builder->where(function ($query) use ($like) {\n\t\t\t$query->where('title', 'like', $like)\n\t\t\t\t->orWhere('description', 'like', $like)\n\t\t\t\t->orWhereHas('skus', function ($query) use ($like) {\n\t\t\t\t\t$query->where('title', 'like', $like)\n\t\t\t\t\t\t->orWhere('description', 'like', $like);\n\t\t\t\t});\n\t\t});\n\t}\n\n\t// 是否有提交 order 参数,如果有就赋值给 $order 变量\n\t// order 参数用来控制商品的排序规则\n\tif ($order = $request->input('order', '')) {\n\t\t// 是否是以 _asc 或者 desc 结尾\n\t\tif (preg_match('/^(.+)(asc|desc)$/', $order, $m)) {\n\t\t\t// 如果字符串的开头是这 3 个字符串之一,说明是一个合法的排序值\n\t\t\tif (in_array($m[1], ['price', 'sold_count', 'rating'])) {\n\t\t\t\t// 根据传入的排序值来构造排序参数\n\t\t\t\t$builder->orderBy($m[1], $m[2]);\n\t\t\t}\n\t\t}\n\t}\n\n\t$products = $builder->paginate(16);\n\n\treturn view('products.index', ['products' => $products]);\n}\ndef index\n # 创建一个查询构造器\n builder = Product.where(on_sale: true)\n # 判断是否有提交 search 参数,如果有就赋值给 search 变量\n # search 参数用来模糊搜索商品\n if params[:search].present?\n like = "%#{params[:search]}%"\n # 模糊搜索商品标题、商品详情、SKU 标题、SKU描述\n builder = builder.where("title LIKE ? OR description LIKE ? OR id IN (\n SELECT product_id FROM skus WHERE title LIKE ? OR description LIKE ?)",\n like, like, like, like)\n end\n\n # 是否有提交 order 参数,如果有就赋值给 order 变量\n # order 参数用来控制商品的排序规则\n if params[:order].present?\n # 是否是以 _asc 或者 desc 结尾\n if params[:order] =~ /^(.+)(asc|desc)$/\n # 如果字符串的开头是这 3 个字符串之一,说明是一个合法的排序值\n if ['price', 'sold_count', 'rating'].include?($1)\n # 根据传入的排序值来构造排序参数\n builder = builder.order("#{$1} #{$2}")\n end\n end\n end\n\n @products = builder.paginate(page: params[:page], per_page: 16)\n\n render 'products/index'\nend"}

Laravel 和 Rails 商品列表页面的实现:搜索、排序和分页

原文地址: https://www.cveoy.top/t/topic/pWwn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录