Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Laravel. Не добавляется запись в связующую таблицу

Mystica Мастер (1181), открыт 1 неделю назад
Есть маленький скрипт для работы с постами, и у которых может быть несколько авторов.

Присутствуют 3 таблицы:
posts (id, title, content),
authors (id, name),
author_posts (id, post_id, author_id)

Модели:
Post
 class Post extends Model 
{
use HasFactory;

protected $fillable = ['title', 'content'];

public function authors(): BelongsToMany
{
return $this->belongsToMany(Author::class, 'author_posts');
}
}

Author

 class Author extends Model 
{
use HasFactory;

public function posts(): BelongsToMany
{
return $this->belongsToMany(Post::class, 'author_posts');
}
}
В контроллере PostController у меня есть экшн для привязки автора к посту:
     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 возвращает список. В котором есть добавленный автор. Но по факту в связующую таблицу ничего не добавляется. В чем может быть причина?
1 ответ
Sergio 2.1 Оракул (67159) 1 неделю назад
Метод validate принимает только правила валидации, а вы передаете вторым параметром данные. Это неправильно.

Исправленный вариант контроллера:
 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()
]);
}
Похожие вопросы