Я просто делаю систему тегов для своего блога, используя отношения «многие ко многим» в laravel.
Сейчас я пытаюсь добавить мультитаг, но получаю ошибку:
Invalid argument supplied for foreach()
вот мой контроллер
public function blogpost(Request $request){
$this->validate($request, [
'title' => 'required|max:255|unique:blogs',
'content' => 'required',
'image' => 'image|required',
]);
$blog = new blog;
$blog->title = $request->title;
$blog->content = $request->content;
$blog->slug = str_slug($blog->title, '-');
$blog->user_id = Auth::user()->id;
$blog->published_at = $request->published_at;
if($request->hasFile('image')) {
$file = Input::file('image');
//getting timestamp
$timestamp = str_replace([' ', ':'], '-', Carbon::now()->toDateTimeString());
$name = $timestamp. '-' .$file->getClientOriginalName();
$file->move(public_path().'/images/blog/', $name);
$blog->image = $name;
$thumb = Image::make(public_path().'/images/blog/' . $name)->resize(640,420)->save(public_path().'/images/blog/thumb/' . $name, 90);
}
$blog_id = $blog->id;
$tags = $request->tag;
foreach ($tags as $tag) {
$tag = tag::firstOrNew(['name' => $tag]);
dd($tag);
}
return Redirect::back()->with('status', 'Post Success');
}
Что вы должны сделать, это убедиться, что тег является массивом, поэтому вы должны улучшить свою проверку следующим образом:
$this->validate($request, [
'title' => 'required|max:255|unique:blogs',
'content' => 'required',
'image' => 'image|required',
'tag' => 'array|required',
'tag.*' => 'required|string',
]);
Теперь вы не подтверждаете это, поэтому вы не знаете, что у вас есть в tag
— это простая строка или ноль или что-то еще.
Других решений пока нет …