Laravel:创建可以为空的 morphs() 关系

Posted

技术标签:

【中文标题】Laravel:创建可以为空的 morphs() 关系【英文标题】:Laravel: Create morphs() relationship nullable 【发布时间】:2020-06-08 03:32:03 【问题描述】:

我想创建一个一对一的多态关系允许空关系。

例子:

  Schema::create('ps_assistances', function (Blueprint $table) 
            $table->bigIncrements('id');
            $table->string('assistance_number', 50)->nullable();
            $table->morphs('assitanceable')->nullable();
  );

但是这个例子在将 "->nullable()" 赋值给 morph 列时返回 null。

我尝试手动创建 _type 和 _id 并且效果很好。

手动变形列示例:

  Schema::create('ps_assistances', function (Blueprint $table) 
            $table->bigIncrements('id');
            $table->string('assistance_number', 50)->nullable();
            $table->string('assitanceable_type')->nullable();
            $table->unsignedBigInteger('assitanceable_id')->nullable();
  );

我想知道是否存在更好的方法来实现可空的一对一多态关系。

【问题讨论】:

【参考方案1】:

nullableMorphs 应该为你处理这个问题

例如:

Schema::create('ps_assistances', function (Blueprint $table) 
    $table->bigIncrements('id');
    $table->string('assistance_number', 50)->nullable();
    $table->nullableMorphs('assitanceable');
);

【讨论】:

以上是关于Laravel:创建可以为空的 morphs() 关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 验证中有时和可为空的区别

Laravel过滤与分页关系为空的记录

选择所有 3 列同时不为空的位置(Laravel 查询生成器)

Laravel 基于自的多态关系

Laravel:Eloquent模型中的多重多态关系

对 laravel 的查询以从“已填充”且不为空的 db 行中获取百分比