Laravel 5.7 - Invalid text representation: 7 ERROR: invalid input syntax for integer: \"10337e35-8da9-4600-b7de-792398eb6f48\"
Laravel 5.7 - Invalid text representation: 7 ERROR: invalid input syntax for integer: \"10337e35-8da9-4600-b7de-792398eb6f48\"
我正在尝试在 Laravel 5.7 中创建数据库通知并获取此 SQL QueryException。我在 toArray 方法中的 $notifiable 变量是用户,异常中的这个 id: invalid input syntax for integer: \"10337e35-8da9-4600-b7de-792398eb6f48\"
是要通知用户的正确 id。我以标准方式设置了通知 table:
Schema::create('notifications', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('type');
$table->morphs('notifiable');
$table->text('data');
$table->timestamp('read_at')->nullable();
$table->timestamps();
});
我的用户 table 是这样设置的:
Schema::create('users', function (Blueprint $table) {
$table->uuid('id');
$table->primary('id');
$table->string('name');
$table->string('username')->unique();
$table->string('email');
$table->string('password');
$table->rememberToken();
$table->timestamps();
$table->softDeletes();
});
它设置了一个uuid作为主id。除此之外,通知本身在via方法中有database
:
public function via($notifiable)
{
return ['database', 'mail'];
}
我在 toArray 方法中设置了几个属性。没什么复杂的。我还尝试手动插入通知 table,我可以插入一个带有 notifiable_id
作为 int 而不是 string/uuid 的条目。令我难以置信的是,nofiable 系统不会设置为允许 uuid 作为 id。也许这只是一个小的调整,但我没有看到它,并且肯定有人 运行 参与其中。干杯!
完全异常:
Object { message: "SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for integer: \"0e7cc3d8-bfca-41c1-99f8-6da9e8887465\" (SQL: insert into \"notifications\" (\"id\", \"type\", \"data\", \"read_at\", \"notifiable_id\", \"notifiable_type\", \"updated_at\", \"created_at\") values (f6206d4e-c98f-4ced-a1ee-6a755f073807, App\Notifications\BugTransition, {\"bug_id\":\"be14d750-ba6c-4e70-82f7-a36786ff37f4\",\"workflow_state\":\"accepted\"}, , 0e7cc3d8-bfca-41c1-99f8-6da9e8887465, App\User, 2018-10-22 22:35:54, 2018-10-22 22:35:54))", exception: "Illuminate\Database\QueryException", file: "/srv/app/vendor/laravel/framework/src/Illuminate/Database/Connection.php", line: 664,
问题是 notifiable_id
。 $table->morphs('notifiable');
创建一个整数列,但您正在尝试存储一个字符串。
您必须自己创建列(和索引):
$table->string('notifiable_type');
$table->string('notifiable_id');
$table->index(['notifiable_type', 'notifiable_id']);
我正在尝试在 Laravel 5.7 中创建数据库通知并获取此 SQL QueryException。我在 toArray 方法中的 $notifiable 变量是用户,异常中的这个 id: invalid input syntax for integer: \"10337e35-8da9-4600-b7de-792398eb6f48\"
是要通知用户的正确 id。我以标准方式设置了通知 table:
Schema::create('notifications', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('type');
$table->morphs('notifiable');
$table->text('data');
$table->timestamp('read_at')->nullable();
$table->timestamps();
});
我的用户 table 是这样设置的:
Schema::create('users', function (Blueprint $table) {
$table->uuid('id');
$table->primary('id');
$table->string('name');
$table->string('username')->unique();
$table->string('email');
$table->string('password');
$table->rememberToken();
$table->timestamps();
$table->softDeletes();
});
它设置了一个uuid作为主id。除此之外,通知本身在via方法中有database
:
public function via($notifiable)
{
return ['database', 'mail'];
}
我在 toArray 方法中设置了几个属性。没什么复杂的。我还尝试手动插入通知 table,我可以插入一个带有 notifiable_id
作为 int 而不是 string/uuid 的条目。令我难以置信的是,nofiable 系统不会设置为允许 uuid 作为 id。也许这只是一个小的调整,但我没有看到它,并且肯定有人 运行 参与其中。干杯!
完全异常:
Object { message: "SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for integer: \"0e7cc3d8-bfca-41c1-99f8-6da9e8887465\" (SQL: insert into \"notifications\" (\"id\", \"type\", \"data\", \"read_at\", \"notifiable_id\", \"notifiable_type\", \"updated_at\", \"created_at\") values (f6206d4e-c98f-4ced-a1ee-6a755f073807, App\Notifications\BugTransition, {\"bug_id\":\"be14d750-ba6c-4e70-82f7-a36786ff37f4\",\"workflow_state\":\"accepted\"}, , 0e7cc3d8-bfca-41c1-99f8-6da9e8887465, App\User, 2018-10-22 22:35:54, 2018-10-22 22:35:54))", exception: "Illuminate\Database\QueryException", file: "/srv/app/vendor/laravel/framework/src/Illuminate/Database/Connection.php", line: 664,
问题是 notifiable_id
。 $table->morphs('notifiable');
创建一个整数列,但您正在尝试存储一个字符串。
您必须自己创建列(和索引):
$table->string('notifiable_type');
$table->string('notifiable_id');
$table->index(['notifiable_type', 'notifiable_id']);