У меня имеется три таблицы:
items (товары) - id, name
items_categories - id, item_id, category_id
categories (категории) - id, title
Как они связаны думаю понятно. Товар может иметь несколько категорий. Вывести в таблицу товары и категории к ним у меня получилось. Теперь пытаюсь сделать возможным добавление нового товара и выбор категорий к нему. Читаю в разных источниках везде как-то по-разному делается. Задача для меня уже просто убийственная, вообще не получается. Пробовал attach, saveMany, createMany,
Items.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Items extends Model
{
protected $fillable = ['name'];
public function category() {
return $this->belongsToMany('App\Categories', 'category_items','item_id','category_id');
}
}
ItemsController.php
class ItemsController extends Controller
{
public function index() {
$item = new Items();
$items = $item->with('category')->get();
return view('items.index', [
'items' => $items,
]);
}
public function store(Request $request) {
$rules = [
'name' => 'required|min:3|max:255',
];
$messages = [
'required' => 'Введите название категории!'
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return Redirect::to('items/create')
->withErrors($validator);
} else {
$items = new Items;
$items->fill($request->all());
$items->save();
Session::flash('message', 'Товар успешно создана');
return Redirect::to('items');
}
}
public function create() {
$categories = Categories::get();
return view('items.create', [
'categories' => $categories,
]);
}
public function update(Request $request, $id) {
$rules = [
'name' => 'unique:items|min:3|max:255'
];
$messages = [
'unique' => 'Такой Товар уже имеется!'
];
$validator = Validator::make($request->all(),$rules, $messages);
if ($validator->fails()) {
return Redirect::to('items/' . $id . '/edit')
->withErrors($validator);
} else {
$item = supermegalaravel\Items::find($id);
$item->fill($request->all());
$item->save();
Session::flash('message', 'Товар успешно отредактирован!');
return Redirect::to('items');
}
}
public function destroy($id) {
$item = Items::find($id);
$item->delete();
Session::flash('message', 'Товар успешно удален');
return Redirect::to('items');
}
public function edit($id) {
$item = Items::find($id);
return view('items.edit', [
'item' => $item,
]);
}
}
create.blade.php
{{ Form::open(['url' => 'items']) }}
<div class="form-group">
{{ Form::label('name', 'Название товара') }}
{{ Form::text('name', Input::old('name'), ['class' => 'form-control']) }}
{{ Form::label('categories', 'Категории') }}
<select class="form-control" name="categories" multiple="multiple">
@foreach ($categories as $category)
<option value="{{ $category->title }}">{{ $category->title }}</option>
@endforeach
</select>
</div>
{{ Form::submit('Создать товар', ['class' => 'btn btn-primary']) }}
{{ Form::close() }}