【问题标题】:Getting 2 result from one query with elequent laravel使用雄辩的 laravel 从一个查询中获得 2 个结果
【发布时间】:2026-02-09 14:05:01
【问题描述】:

我想从 Laravel 版本 6 中的过滤器查询中获得 2 个结果。我想通过名称为 pageitemcount 的选择框获取用户可以更改页面中存在的项目的产品表信息,并且可以通过字段搜索select 的名称。当用户选择 pageitemcount 并搜索名称时,提交表单并运行以下查询。当用户搜索任何内容时,类别的可用过滤器必须限制为可用类别。我想在产品列表之外显示不同的产品类别。

public function productIndex(Request $request)
{
   $take = 10;

   $query = Product::query();

   if ($request->has('pageitem')){
       $take = $request->input("pageitem");
   }

   // Search
   if ($request->has('search')){
       $query = $query->where('name', $request->input("search"));
   }

   $availableCategoriesQuery= $query;

   // Get product unique product category to show them to user 
   // that exist in prodcut list that show to user
   $availableCategories = $availableCategoriesQuery->select("category_id")->distinct()->get();

   // Get product list by pagination
   $productList = $query->paginate($take);

   return view('admin.manage_product', ['productList' => $productList, 'availableCategories' => $availableCategories]);
}

但是当$availableCategories 被执行时,影响$query 变量,我无法从下一行得到正确的结果,我在$productList 变量中得到$availableCategories 的结果。我不想再重复我的代码,我该如何处理?

$availableCategories 的结果是完全正确的,但是productList 的结果是$availableCategories 是分页的。

【问题讨论】:

  • 很难弄清楚你在问什么。尝试发布一些示例 $request 信息以及您正在寻找什么样的响应。如果您希望获得两个完全不同的查询,最好分别运行它们。
  • 我想澄清一下,我想将此查询的 2 个单独结果发送给用户

标签: php sql laravel


【解决方案1】:

好的,我想我看到了问题所在。您正在尝试重用 $query 变量。你可能想要这样的东西:

我假设product_categories 是您的产品类别表。如果需要,您也可以使用该模型。

另外,由于 DB 没有内在顺序,您还应该指定 OrderBy()

$take = $request->input("pageitem", 10);
$productList = Product::paginate($take)->get();
$availableCategories = DB::table('product_categories')->distinct()->get("category_id");

【讨论】:

  • 你说的这种说法是对的,但可能是用户搜索特定名称时产品列表中不存在某些产品类别。
  • 我不太明白你的评论。分页的想法是一次只显示几个项目。所以,根据定义,会有一些项目丢失。
  • 我只想有过滤器,当用户搜索任何东西时,可用的类别过滤器必须限制为可用的类别。
  • 那么,也许你想要$productList = Product::where('product_category', $request->input('xxx'))->paginate($take)->get();
  • 但上面的查询无法让我获得产品结果的可用产品类别。