首页 文章

Laravel Nova Polymorphic多对多关系不起作用

提问于
浏览
1

我正在使用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 回答

  • 0

    我发现了错误 . 但是我发布答案以防有人有同样的问题,这个答案可能对他们有所帮助 .

    问题是我没有使用Nova的正确字段 . 在新星中,我使用的是BelongsToMany . 而不是那样,我需要使用MorphToMany字段 .

  • 2
    Field involvable_type does not have a default value. (SQL: insert into involvables (user_id, involvable_id) values (1, 5))
    

    此错误意味着在数据库中此字段没有 default value ('',NULL,您需要的whataver),您只需将其设置为可为空或传递值 .

相关问题