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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel:Eloquent模型中的多重多态关系相关的知识,希望对你有一定的参考价值。

我有一个表命名注释,具有以下结构

Schema::create('comments', function (Blueprint $table) {
$table->increments('id');
$table->morphs('commentable');
$table->morphs('creatable');
$table->text('comment');
$table->timestamps();
});

雄辩的文件

class Comment extends Model
{
    public $fillable = ['comment'];

    public function commentable()
    {
        return $this->morphTo();
    }

    public function creatable()
    {
        return $this->morphTo();
    }
}

我有两个多态关系

commentable适用于任何文章/帖子或视频

creatable评论用户/管理员的评论创建者

如何针对用户创建的帖子添加评论?

我尝试使用以下代码创建

public function addComment($creatable, $comment)
{
        $this->comments()->create(['comment' => $comment, 'creatable' => $creatable]);
}

它确实有效,我收到了以下错误

Illuminate/Database/QueryException with message 'SQLSTATE[HY000]: General error: 1364 Field 'creatable_type' doesn't have a default value (SQL: insert into `post_comments` (`comment`, `commentable_id`, `commentable_type`, `updated_at`, `created_at`) values (Test Comment, 1, App/Post, 2018-08-31 10:29:14, 2018-08-31 10:29:14))'

提前致谢!!!

答案

你可以使用make()

public function addComment($creatable, $comment)
{
        $this->comments()->make(['comment' => $comment])
            ->creatable()->associate($creatable)
            ->save();
}

以上是关于Laravel:Eloquent模型中的多重多态关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 带计数的多重连接(不是 Eloquent)

在 Laravel 中使用 Eloquent 多态关系对数据进行分类

Laravel 5中的反向多态关系

Laravel:模型内的验证。多重验证规则

Laravel/Eloquent - 创建与可能具有或不具有属性的父模型相关的多个子模型的关系

Laravel Eloquent 多重求和