【发布时间】:2018-10-26 18:44:21
【问题描述】:
我的问题很简单,但我找不到这个特定问题的任何答案。
问题是,我在 Laravel 中有这个迁移:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
//$table->string('guid');
$table->boolean('verified')->default('0');
$table->integer('tribe_id')->length(10)->unsigned()->default('1');
$table->boolean('admin')->default('0');
$table->rememberToken();
$table->timestamps();
});
Schema::table('users', function($table) {
$table->foreign('tribe_id')->references('id')->on('tribes')->onDelete('cascade');
});
}
如您所见,我已评论了一个字段。但是,当我删除 // 并运行迁移(在干净的数据库上)并且当我尝试执行登录时,它会返回:
lluminate \ Database \ QueryException (HY000)
SQLSTATE[HY000]: General error: 2057 A stored procedure returning result sets of different size was called. This is not supported by libmysql (SQL: select * from `users` where `email` = email@email.com limit 1)
这个认证代码的主要部分是默认 Laravel artisan make:auth 命令生成的。
问题是,我已经有一些额外的字段并且它确实有效,但是由于某种原因,当我添加“guid”新字段(或另一个,名称无关紧要)时,它会破坏我缺少的东西。 ..
编辑:它与 MySQL 数据库有关。我将其从 Shared Hosting MariaDB 服务器更改为 Google Cloud (5.7) 并且它正在工作...
EDIT2:通过使用另一个名称创建另一个数据库来解决它(使用相同名称重新创建不起作用)并且它再次开始工作......
【问题讨论】:
-
我试着做和你一样的东西,对我来说效果很好。我唯一能注意到的是,对于所有其他额外字段,您要么具有默认值,要么可以为空,但对于 guid,您没有。当您说生成了主要部分的身份验证代码时,您添加了哪些更改?因为错误表明存储过程返回的值比预期的少/多。
-
它表示您的数据库中有一个存储过程。也许您必须修改该数据库过程以返回预期的内容。
-
@nakov,我删除了默认值,因为我认为这是它搞砸的默认值。这些更改是您可以在数据库迁移、用户模型中的 $fillable 变量、视图刀片中看到的更改,并且我更改了 sendMailVerificationNotification() 函数。我不知道错误引用的过程是什么。
-
@newUserName02,数据库很干净...我不知道。
-
@Fred 为什么要单独写外键约束?
标签: php laravel migration libmysql