gpt4 book ai didi

php - Laravel/MySql 基于 Id 的唯一字符串?

转载 作者:可可西里 更新时间:2023-11-01 08:29:53 26 4
gpt4 key购买 nike

我有以下迁移来创建我的 MySQL 数据库表

public function up()
{
Schema::create('project_auth_keys', function (Blueprint $table) {
$table->increments('id');
$table->integer('project_id')->unsigned();
$table->string('key', 800);
$table->string('first_name', 80);
$table->string('last_name', 80);
$table->timestamps();

// link project id with real project id
$table->foreign('project_id')->references('id')->on('projects');
});
}

现在我想要完成的是让'key'“独一无二”......但是我知道我可以通过简单地改变来做到这一点

$table->string('key', 800)->unique();

但我不想让它在整个表中都是唯一的,我想根据 project_id 让它变得唯一。

例如,project_id 为 1 的条目和 project_id 为 2 的条目可以具有相同的键,但是同一个 project_id 中不能有 2 个相同的键。

这是我可以在 MySQL 中做的事情,还是我必须在我的 Controller 中将其作为规则?我可以在我的 Controller 中执行此操作,这不是问题,但如果可能的话,我宁愿在我的数据库中执行此操作。

编辑

尝试添加

$table->primary(array('project_id', 'key'));

将它添加到 $table->primary(array('project_id', 'key')); 的正下方

但是在执行此操作后,我在尝试运行迁移时遇到错误。

enter image description here

最佳答案

是这样的吗?

$table->primary(array('project_id', 'key'));

您可以在文档中找到相同的内容 here .

解决方案 1:由于您已经定义了增量列,因此它与默认主键相同。

要使用复合主键,您可以删除该列或以不同方式计算该列,否则会抛出重复主键异常。

此外,主键的长度限制为“767”,因此您应该尽可能将 key 长度减少到低于该长度。

我刚刚尝试了以下方法并且有效:

Schema::create('test', function(Blueprint $table)
{
$table->integer('project_id')->unsigned();
$table->string('key', 100); // make sure the key length is within sql standards(767), "800" is not acceptable for primary key
$table->string('first_name', 80);
$table->string('last_name', 80);
$table->timestamps();
// Add primary
$table->primary( array( 'key', 'project_id' ) );
});

解决方案 2:您可以只在 Controller 中执行验证,我相信这会给您带来更大的灵 active ,并且具有相同的结构,只是将 id 作为主键。但是,我对性能不是很有信心。你必须检查一下。

希望这对您有所帮助。

关于php - Laravel/MySql 基于 Id 的唯一字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29947996/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com