在 Laravel 中,多态关系是一种强大的功能,它允许一个模型在多个其他类型的模型上拥有关联。自定义键的多态关系是指在多态关系中使用自定义的外键和类型字段,而不是使用 Laravel 默认的字段名。
多态关系涉及三个主要部分:
假设我们有一个 Comment
模型,它可以属于 Post
或 Video
模型,并且我们希望使用自定义的外键和类型字段。
Schema::create('comments', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('commentable_id');
$table->string('commentable_type');
$table->text('body');
$table->timestamps();
});
class Comment extends Model
{
public function commentable()
{
return $this->morphTo(__FUNCTION__, 'commentable_type', 'commentable_id');
}
}
class Post extends Model
{
public function comments()
{
return $this->morphMany(Comment::class, 'commentable', 'commentable_type', 'commentable_id');
}
}
class Video extends Model
{
public function comments()
{
return $this->morphMany(Comment::class, 'commentable', 'commentable_type', 'commentable_id');
}
}
原因:可能是由于自定义字段名与默认字段名不一致导致的。
解决方法:确保在模型中正确指定了自定义字段名。
return $this->morphTo(__FUNCTION__, 'custom_type_field', 'custom_id_field');
解决方法:可以在模型中使用 $fillable
属性来指定允许批量赋值的字段。
protected $fillable = ['commentable_id', 'custom_type_field', 'body'];
自定义键的多态关系提供了更高的灵活性和可读性,但也需要开发者更加注意字段名的正确配置。通过上述示例和解决方法,可以有效地管理和维护多态关系。
领取专属 10元无门槛券
手把手带您无忧上云