chandra-hemant/htkc-utils

介绍为Laravel应用程序提供强大且灵活的动态搜索功能,旨在简化具有嵌套和递归关系条件的复杂查询。此软件包提供了一种优雅的解决方案,可以在多个模型及其相关数据中动态搜索,为开发者提供在单个、简化的查询中处理各种关系级别的功能。

v1.2.2 2024-09-05 06:09 UTC

This package is not auto-updated.

Last update: 2024-09-19 10:01:09 UTC


README

概述

介绍为Laravel应用程序提供强大且灵活的动态搜索功能,旨在简化具有嵌套和递归关系条件的复杂查询。此软件包提供了一种优雅的解决方案,可以在多个模型及其相关数据中动态搜索,为开发者提供在单个、简化的查询中处理各种关系级别的功能。

类概述

命名空间:ChandraHemant\DynamicSearch
作者:Hemant Kumar Chandra

功能

  • 动态模型和资源处理:通过API请求直接传递模型名称和资源类,便于动态查询不同模型。
  • 搜索多个列:通过在API请求中指定列,可以在模型或其相关模型中跨多个列进行搜索。
  • 嵌套和递归关系:该功能支持嵌套关系,允许您在相关模型及其子关系中深入搜索。
  • 灵活和可扩展:易于扩展或修改功能以适应特定应用程序的需求,使其成为任何Laravel项目的多功能工具。
  • 安全和验证:内置验证确保仅处理有效的模型和资源,降低错误风险并提高应用程序安全性。

使用示例

以下是一个API请求示例,展示该函数的工作方式

{
    "model": "Customer",
    "resource": "CustomerResource",
    "column": ["name", "phone", "email", "orders.product.category.name"],
    "value": "Electronics"
}

在此示例中,该函数将

  • 在客户模型中搜索名称、电话或电子邮件字段中的匹配项。
  • 遍历订单关系到产品模型,然后进一步到类别模型以在名称字段中搜索匹配项。

安装

您可以通过Composer安装软件包,轻松地将此功能添加到Laravel项目中

composer require chandra-hemant/htkc-utils

DynamicSearchHelper 类

DynamicSearchHelper 类提供了一组用于从数据库表检索和操作数据的方法,特别针对与Laravel的Eloquent ORM一起使用而量身定制。本指南概述了如何有效地使用这些方法来实现动态搜索功能。

使用

检索数据

您可以使用 getDynamicSearchData 方法从数据库表检索数据。

use Illuminate\Http\Request; // Import your Eloquent model

 $searchColumns = [
    // Specify your searchable columns here
 ];

$helper = new DynamicSearchHelper(
    request: $request,
    searchColumns: $searchColumns,
    withPagination: true,
    queryMode: false,
    isApi: true
);

$result = $helper->getDynamicSearchData();

搜索功能

您可以通过提供要搜索的列和关系来启用搜索功能。

// Define search value, columns, and relationships
$searchColumns = ['column1','relationshipMethod.column2','relationshipMethod1.relationshipMethod2.column3','relationshipMethod3.relationshipMethod4.relationshipMethod5.relationshipMethod6.column8'];

分页

根据请求参数自动应用分页。

构造函数参数

  • $request (Illuminate\Http\Request)。
  • $searchColumns (数组):一个指定要搜索的列的数组。
  • $withPagination (布尔值):指定是否分页数据。
  • $queryMode (布尔值):指定从提供的Eloquent模型中获取数据。
  • $isApi (布尔值):指定数据格式。

方法

getDynamicSearchData(): Illuminate\Support\Collection 从提供的Eloquent模型检索动态搜索数据。

示例

以下是如何在控制器中使用这些方法的示例

use Illuminate\Http\Request;
use ChandraHemant\HtkcUtils\DynamicSearchHelper;

class YourController extends Controller
{
    public function index(Request $request)
    {

        $user = Auth::user();

        $helper = new DynamicSearchHelper(
            request: $request,
            searchColumns: ['unique_id' => $user->unique_id],  // Provide your search columns if needed
            withPagination: true,
            queryMode: false,
            isApi: false,
        );
    
        // Get the dynamic search data
        $data = $helper->getDynamicSearchData();

        return view('your_view', compact('data'));
    }
}

结论

本指南提供了如何在Laravel应用程序中使用DynamicSearchHelper类的基本概述。通过遵循这些说明,您可以轻松实现动态搜索功能。

使用方法

  1. 安装:确保您的Laravel项目中包含DataTableHelper类。
  2. 初始化:创建DataTableHelper类的实例。
  3. 数据检索:通过指定列、关系列和其他参数调用getDynamicSearchData方法,以检索自定义的分页和过滤数据。
  4. 定制:通过修改方法或扩展其功能,根据您的具体使用情况调整该类。

通过利用DataTableHelper类,您可以无缝地将动态搜索功能集成到您的Laravel应用程序中,提供一种用户友好且高效的表格形式处理大量数据的方法。

注意

在DynamicSearchHelper类中,保持searchColumns数组与模型及其关系中的实际列之间的一致性对于获得准确的搜索结果至关重要。

searchColumns数组指定了在您的模型中要搜索的字段和关系。每个元素应直接对应于在您的Eloquent模型中定义的列和关系。例如,如果您在searchColumns中指定了['orders.product.category.name'],则假设您的模型已正确设置了适当的关联(orders, product, category),并且每个关联都有可供搜索的name字段。

为确保动态搜索功能无缝工作,请务必检查以下内容:

  • searchColumns中使用的列名和关系方法与在您的Eloquent模型中定义的名称相匹配。
  • 在您的模型中正确定义了关系,并且可以用于查询。
  • 搜索功能与数据库模式的结构和命名约定一致。

不一致或不正确的searchColumns值可能导致意外的结果或错误,因为辅助类将尝试搜索可能不存在或不正确定义的列和关系。