I am unable to save or update the data from my frontend, I’m getting this error. I Have a category table, an item table, and a category item (pivot) table.
The following is my Item Controller File Code:
<?php
namespace AppHttpControllers;
use AppModelsItem;
use IlluminateHttpRequest;
class ItemController extends Controller
{
public function index()
{
return Item::all();
}
public function show($item)
{
return Item::findOrFail($item);
}
public function store(Request $request)
{
$validatedData = $request->validate([
'name' => 'required|string|max:255',
'description' => 'required|string',
'price' => 'required|numeric|min:0',
'ingredients' => 'required|string',
'photo' => 'nullable|string|max:255',
'category_id' => 'nullable|integer|exists:categories,id',
]);
// Remove the 'category_id' from the validated data
$categoryId = $validatedData['category_id'] ?? null;
unset($validatedData['category_id']);
// Create the item
$item = Item::create($validatedData);
// Sync categories if category_id is provided
if ($categoryId) {
$item->categories()->sync([$categoryId]);
}
return $item;
}
public function update(Request $request, $item)
{
$validatedData = $request->validate([
'name' => 'sometimes|required|string|max:255',
'description' => 'sometimes|required|string',
'price' => 'sometimes|required|numeric|min:0',
'ingredients' => 'sometimes|required|string',
'photo' => 'nullable|string|max:255',
'category_id' => 'nullable|integer|exists:categories,id',
]);
$item = Item::findOrFail($item);
$item->update($validatedData);
return $item;
}
public function destroy($item)
{
$item = Item::findOrFail($item);
$item->delete();
return $item;
}
}
The following is my Item Resource File Code:
<?php
namespace AppFilamentResources;
use AppFilamentResourcesItemResourcePages;
use AppModelsCategory;
use AppModelsItem;
use FilamentForms;
use FilamentFormsForm;
use FilamentFormsComponentsFileUpload;
use FilamentFormsComponentsTextInput;
use FilamentFormsComponentsTextArea;
use FilamentFormsComponentsSelect;
use FilamentResourcesResource;
use FilamentTables;
use FilamentTablesColumns;
use FilamentTablesColumnsTextColumn;
use FilamentTablesColumnsImageColumn;
use FilamentTablesTable;
class ItemResource extends Resource
{
protected static ?string $model = Item::class;
protected static ?string $navigationIcon = 'heroicon-o-squares-2x2';
public static function form(Form $form): Form
{
$categories = Category::with('children')->get();
// Define a recursive function to format categories and subcategories
$formatCategories = function ($categories) use (&$formatCategories) {
$options = [];
foreach ($categories as $category) {
$options[$category->id] = $category->name;
if ($category->children->isNotEmpty()) {
$options += $formatCategories($category->children);
}
}
return $options;
};
// Format categories and subcategories for select options
$categoryOptions = $formatCategories($categories);
return $form
->schema([
TextInput::make('name')->required(),
FileUpload::make('photo'),
TextInput::make('price')->required(),
TextArea::make('description'),
TextInput::make('ingredients'),
// Add a drop-down menu for all categories and subcategories
Select::make('category_id')
->label('Category')
->multiple()
->options($categoryOptions)
->placeholder('Select categories'),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('name'),
TextColumn::make('description'),
TextColumn::make('price'),
ImageColumn::make('photo'),
])
->filters([
//
])
->actions([
TablesActionsEditAction::make(),
])
->bulkActions([
TablesActionsBulkActionGroup::make([
TablesActionsDeleteBulkAction::make(),
]),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => PagesListItems::route('/'),
'create' => PagesCreateItem::route('/create'),
'edit' => PagesEditItem::route('/{record}/edit'),
];
}
}
This is what I tried….
When I press save the following happens….
New contributor
Mohamed Humaam Athif is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.