ticetmp / 逗号分隔
在传统 Eloquent 关系不适用且需要使用逗号分隔的值方法手动处理关系的场景中,此函数可能很有用
Requires
- php: >=5.4.0
README
在传统 Eloquent 关系不适用且需要使用逗号分隔的值方法手动处理关系的场景中,此函数可能很有用
安装
composer require ticetmp/comma-separated:"^1"
如果您将数据存储在数据库中,如下所示
并且您需要获取如下所示的数据,而无需额外的连接目标表
此库可以帮助您
用法
使用
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 查询,但这并不总是最佳选择。特别是在数据量很大或需要更多搜索和管理数据灵活性的情况下,应仔细考虑此方法的相关权衡。
享受。