memdevs / tag
能够创建标签并将其存储在数据存储中。包括设置标签自定义数据的能力。标签可以具有多个值。
Requires (Dev)
- aura/sql: ^2.0
- beberlei/assert: ^2.3
- nesbot/carbon: ^1.22
This package is auto-updated.
Last update: 2024-09-24 05:00:16 UTC
README
"标签"通常是指附加到另一条记录的信息。
对于那些熟悉Infusionsoft标签的人来说,这基本上就是它。
然而,这些标签要复杂一些。
版本编号
本项目将使用语义版本控制进行维护。话虽如此,我不期望从0.x升级到1.x时会出现任何不兼容的问题。
这个库目前在几个系统中被用于生产环境,没有任何缺陷,但我有非常具体的用例。如果这个库变得稍微流行一些并且没有问题出现,我预计它将保持当前的1.x状态。
简介
假设你在CRM中有一个包含联系信息的个人记录。
他们询问你的产品X,你想要在某个地方记录下来,并且以后能够搜索任何要求信息的人。
你可以创建一个标签,让我们称之为'询问',并希望在标签中存储所有不同产品的请求记录。
每个标签都有一个数字ID,比如说'询问'标签的ID是10。
每个产品或请求类型也必须有一个数字ID,比如说产品X的ID是20。
现在你可以创建一个ID为10的标签,其值为20。PDOTag类将允许你将标签与外部ID关联起来,在这种情况下是你的个人记录ID,比如说5。
在我们的示例表'tagdefinition'中,我们之前将标签1定义为非唯一的整数标签。
$mysql_host = "127.0.0.1";
$mysql_db = "tagmodel";
$mysql_user = 'tagmodel_user';
$mysql_pass = '';
$pdo = new \PDO("mysql:host={$mysql_host};dbname={$mysql_db};charset=utf8", $mysql_user, $mysql_pass);
$external_id = 5;
$tag_id = 10;
$product_x = 20;
$tag = new \memdevs\tag\PDOTag($external_id, $pdo);
$tag->addTag($tag_id, $product_x);
$success = $tag->hasTagIdValue($tag_id, $product_x); // Will return true
使用示例数据库,你会得到这个
这个人在询问产品Y,产品Y的ID是25。你添加另一个标签,得到
$product_y = 25;
$tag->addTag($tag_id, $product_x);
$success = $tag->hasTagIdValue($tag_id, $product_x); // Will return true
$success = $tag->hasTagIdValue($tag_id, $product_y); // Will return true
他们不再对产品X感兴趣,所以你可以删除这个标签。由于标签1 '询问'有多个值/记录,你需要确切地知道要删除哪一个。你可以删除标签1,但这会删除所有值。
$tag->deleteTagIdValue($tag_id, $product_x);
$success = $tag->hasTagIdValue($tag_id, $product_x); // Will return false
$success = $tag->hasTagIdValue($tag_id, $product_y); // Will return true
如果他们填写了一个包含信息字段的需求表单,并且你需要保留这些信息,你会怎么办?你可以创建多个表来处理不同的表单数据,甚至可以创建一个"form_responses"表来保存它们。或者,你可以将信息作为json标签(标签类型'j')附加,它可以存储任何类型的json结构。
使用示例数据库,标签3
$tag_id_json = 3;
$data = $_POST;
$tag->addTag($tag_id, $data);
$submitted_data = $tag->getTagValue($tag_id_json);
当前实现中,主要的限制是1个标签ID = 1个条目。这意味着你不能使用通用的"表单标签"来保存各种条目;相反,每个表单都会有唯一的标签来保存数据。
标签类型
- n - 没有附加标签数据
- i - 整数数据
- t - 文本数据
- j - json格式数据;将作为数组返回给调用者
- c - 计数器 - 可以设置、重置、增加和减少
i和t(整数和文本)可以是唯一的或具有多个值。
在PDOTag和AuraTAG类中,通过使用整数数据字段存储Unix时间戳来实现定时标签。定时标签可以设置、重置、增加和减少。然而,如果使用hasTimedTag($tag_id),它只会返回未过期的标签。
这个定时标签可以用来跟踪即将到期的优惠,例如。当你提供优惠时,如果个人有8小时来做出决定,只需设置定时标签。如果计时器过期,优惠将不可用。如果hasTimedTag($tag_id)返回一个值,那么优惠是有效的。
注意
竞态条件可能存在,尤其是在计数器的情况下。这意味着在读取计数器后,它会被增加并写回。在这段时间内,另一个进程读取计数器的可能性非常高,它们都将更新到相同的计数。
待办事项:添加一个用于增加值的函数,而不是读取、增加然后写回。
在此期间,请确保在需要的地方实现适当的锁定机制以增加计数器。
许可
MIT许可。版权所有(C)Steve Eriksen 2017