【发布时间】:2020-07-11 09:51:20
【问题描述】:
我的 Laravel 应用程序是多租户、同表和同数据库,使用 team_id 外键。
对于每个团队,他们的每个资源都有一个连续的number,在创建资源时手动递增和分配,如下所示。
/**
* Handle the "creating" event.
*
* @param Product $product
* @return void
*/
public function creating(Product $product)
{
$product->number = $product->team->products()->withTrashed()->max('number') + 1;
}
但是,事实证明,当同一团队和资源类型在同一时间有多个请求时,这些资源将获得相同的数量。
解决这个问题的最佳方法是什么,又不会太乱?
我正在考虑在创建资源后立即检查和更正该数字,但这有点混乱,并且每个请求都会导致 1 或 2 个额外的查询。但是,如果多个请求同时发生,这可能仍然行不通。
【问题讨论】:
-
默认的自增主键号documentaiton under primary keys有什么问题?
-
@danblack 因为它不完全是主键。每个
team_id必须是唯一的。 -
您可能想要使用 UUID。 github.com/ramsey/uuiduuidtools.com/what-is-uuid
标签: mysql laravel increment multi-tenant