Laravel. Не добавляется запись в связующую таблицу
Есть маленький скрипт для работы с постами, и у которых может быть несколько авторов.
Присутствуют 3 таблицы:
posts (id, title, content),
authors (id, name),
author_posts (id, post_id, author_id)
Модели:
Post
1234567891011
class Post extends Model
{
use HasFactory;
protected $fillable = ['title', 'content'];
public function authors(): BelongsToMany
{
return $this->belongsToMany(Author::class, 'author_posts');
}
}
Author
12345678910
class Author extends Model
{
use HasFactory;
public function posts(): BelongsToMany
{
return $this->belongsToMany(Post::class, 'author_posts');
}
}
В контроллере PostController у меня есть экшн для привязки автора к посту:
12345678910
public function attachAuthor(Post $post, Request $request)
{
$data = $request->validate([
'authorId' => 'required|exists:authors,id',
], $request->all());
$post->authors()->attach($data['authorId']);
dump($post->authors);
}
attach отрабатывает, на выводе dump возвращает список. В котором есть добавленный автор. Но по факту в связующую таблицу ничего не добавляется.

В чем может быть причина?
По дате
По рейтингу
Потому что ларка, переходите на Yii2
Метод validate принимает только правила валидации, а вы передаете вторым параметром данные. Это неправильно.
Исправленный вариант контроллера:
1234567891011121314
public function attachAuthor(Post $post, Request $request)
{
$data = $request->validate([
'authorId' => 'required|exists:authors,id'
]);
$post->authors()->attach($data['authorId']);
return response()->json([
'success' => true,
'authors' => $post->authors()->get()
]);
}