我正在使用Laravel Nova开发一个Laravel管理仪表板 . 我在使用多态多对多关系时遇到了问题 . 以下是我的情景 .
我有这个定义的用户表
class User extends Model
{
public function sportsocieties()
{
return $this->morphedByMany(SportSociety::class, 'involvable', 'involvables', 'user_id', 'involvable_id');
}
public function dancersocieties()
{
return $this->morphedByMany(DancerSociety::class, 'involvable', 'involvables', 'user_id', 'involvable_id');
}
}
这是SportSociety模型类
class SportSociety extends Model
{
public function users()
{
return $this->morphToMany(User::class, 'involvable', 'involvables', 'involvable_id','user_id');
}
}
这是DancerSociety模型类
class DancerSociety extends Model
{
public function users()
{
return $this->morphToMany(User::class, 'involvable', 'involvables', 'involvable_id','user_id');
}
}
然后我创建了一个迁移来创建数据透视表 . 这是迁移文件的定义 .
class CreateInvolvablesTable extends Migration
{
public function up()
{
Schema::create('involvables', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->unsignedInteger("user_id");
$table->unsignedInteger("involvable_id");
$table->string("involvable_type");
});
}
public function down()
{
Schema::dropIfExists('involvables');
}
}
从Nova UI,当我将SportSociety或DancerSociety附加到用户时,我收到以下错误消息 .
Field involvable_type does not have a default value. (SQL: insert into involvables (user_id, involvable_id) values (1, 5))
我的多态关系有什么问题?或者Nova是否存在多态关系问题?
2 回答
我发现了错误 . 但是我发布答案以防有人有同样的问题,这个答案可能对他们有所帮助 .
问题是我没有使用Nova的正确字段 . 在新星中,我使用的是BelongsToMany . 而不是那样,我需要使用MorphToMany字段 .
此错误意味着在数据库中此字段没有 default value ('',NULL,您需要的whataver),您只需将其设置为可为空或传递值 .