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

Posted

技术标签:

【中文标题】Laravel Nova 多态多对多关系不起作用【英文标题】:Laravel Nova Polymorphic many-to-many relationship is not working 【发布时间】:2019-02-19 04:09:11 【问题描述】:

我正在使用 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 存在多态关系的问题?

【问题讨论】:

【参考方案1】:

问题是我没有为 Nova 使用正确的字段。在 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,你需要什么),你只需要将它设置为可空或传递一个值。

【讨论】:

以上是关于Laravel Nova 多态多对多关系不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 8 多对多关系不起作用(没有抛出错误)

博客上的 Laravel 5.1 多对多标签不起作用

Laravel多态多对多关系数据透视表与另一个模型的关系

使用 Laravel 限制多态多对多关系中的相关记录

Laravel一张表连接到另外两个由多对多的关系

Sequelize多态多对多 - `add` mixin不起作用