Laravel: множественные полиморфные отношения в красноречивой модели - PullRequest
0 голосов
/ 31 августа 2018

У меня есть таблица именованных комментариев со следующей структурой

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))'

Заранее спасибо !!!

1 Ответ

0 голосов
/ 31 августа 2018

Вы можете использовать make():

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