【问题标题】:Laravel adding extra field in table results in General error: 2057Laravel 在表中添加额外字段会导致一般错误:2057
【发布时间】: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


【解决方案1】:
Schema::table('users', function(Blueprint $table) {
    $table->foreign('tribe_id')->references('id')->on('tribes')->onDelete('cascade');
});

尝试像这样将蓝图放在表格中...

或者您可以将 $table->foreign()... 行放在 create 方法中..

【讨论】:

  • 您好,通过查询数据库表解决了...不知道是什么问题。
猜你喜欢
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 2020-04-04
  • 2017-07-31
  • 1970-01-01
  • 2018-07-29
相关资源
最近更新 更多