Я пытаюсь создать комментарий к комментируемой модели (которая создается с использованием полиморфных отношений.) С помощью ключа morphname.
Например; Я хотел бы создать комментарий с именем морфинга (блог) и foreign_key (1). Но название морфа может измениться. Поэтому мы не знаем, какой ключ может быть в запросе. Я не хочу создавать действия для каждого ресурса.
AppServiceProvider:
Relation::morphMap([
'blog' => \App\Models\Blog\BlogPost::class,
'product' => \App\Models\Commerce\Product::class,
]);
Контроллер -> действие:
$this->validate($request, [
'commentable_model' => 'required|string',
'commentable_id' => 'required|integer|min:1',
'comment' => 'required|string'
]);
// i am trying to load data using morph name and foreign key here; but it's not working.
$model = $request->commentable_model::findOrFail($request->commentable_id);
$comment = new Comment;
$comment->comment = $request->comment;
$comment->commentable()->associate($model);
$comment->user()->associate(auth('api')->user());
$comment->save();
Комментируемое отношение:
Schema::create('comments', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->text('comment');
$table->integer('parent_id')->unsigned()->nullable();
$table->foreign('parent_id')->references('id')->on('comments')->onDelete('cascade');
$table->morphs('commentable');
$table->timestamps();
});
Данные:
commentable_model => 'блог',
commentable_id => 1
Я отправлю эти данные через конечные точки API. Итак, я хотел бы использовать только имена morhpnames, а не полные имена классов.
Я не мог заставить его работать.
Есть идеи?