ticetmp/逗号分隔

此包的最新版本(1.2)没有可用的许可证信息。

在传统 Eloquent 关系不适用且需要使用逗号分隔的值方法手动处理关系的场景中,此函数可能很有用

1.2 2024-03-01 07:18 UTC

This package is auto-updated.

Last update: 2024-09-08 03:46:10 UTC


README

在传统 Eloquent 关系不适用且需要使用逗号分隔的值方法手动处理关系的场景中,此函数可能很有用

安装

composer require ticetmp/comma-separated:"^1"

如果您将数据存储在数据库中,如下所示

image

并且您需要获取如下所示的数据,而无需额外的连接目标表

image

此库可以帮助您

用法

使用

use TiceTmP\GetSubQuery;

您需要发送五个参数

  • $masterTable: 这是主表名称

  • $relationTable: 此变量表示包含相关数据的表名称。

  • $relationFieldName: 它指定用于建立关系的关联表中的字段。

  • $idsField: 此参数表示主表中包含引用相关记录的逗号分隔值的字段。

  • $resultFieldName: 这是子查询结果的别名或名称。

示例查询

$data = YouModel::query()
    ->addSelect(
        DB::raw(
            GetSubQuery::getRelationWithCommaSeparated($masterTable, $relationTable, $relationFieldName, $idsField, $resultFieldName)
        )
    );

返回如下文本到 DB::raw()

(SELECT  GROUP_CONCAT(b.test3 ORDER BY b.id)
FROM    test1 a
        INNER JOIN test2 b
            ON FIND_IN_SET(b.id, a.test4) > 0
WHERE  a.id = test1.id
GROUP   BY a.id) as test5

当然!提供的库,通过 getRelationWithCommaSeparated 函数实现,旨在解决需要从多个表检索相关数据而无需在 Laravel Eloquent 或 ORM(对象关系映射)中进行复杂表连接的场景。此方法最小化了数据库的工作量并简化了数据处理过程。

此函数使用 SQL 子查询从 {{$relationTable}} 中获取相关数据,这是包含所需信息的表。与使用传统表连接相比,此方法简化了过程并有助于避免同时连接两个表的相关复杂性。这可以提高数据库性能并降低代码复杂性。

通过在 {{$idsField}} 中使用逗号分隔值来存储相关数据,代码减少了代码复杂性和 SQL 命令,因为无需进行广泛的表连接。这可以减少数据库的工作量。

需要注意的是,虽然使用逗号分隔值存储相关数据可以简化代码和 SQL 查询,但这并不总是最佳选择。特别是在数据量很大或需要更多搜索和管理数据灵活性的情况下,应仔细考虑此方法的相关权衡。

享受。