Home > other >  Laravel Inertia prop not passing values
Laravel Inertia prop not passing values

Time:05-14

When calling an edit function the prop mealService is passing null values and will not populate form fields with values. It looks like the controller isn't loading the model to query the single record. The Create and Store functions work fine.

First time posting. And very new to coding. Please let me know if more info is needed for the question.

edit.vue

export default {
  components: {
    Head,
    Link,
    LoadingButton,
    SelectInput,
    TrashedMessage,
  },
  layout: Layout,
  props: {
    mealService: Object,
    sites: Array,
  },
  remember: 'form',
  data() {
    return {
      form: this.$inertia.form({
        site_id: this.mealService.site_id,
        meal_type: this.mealService.meal_type,
        adults: this.mealService.adults,
        tally: this.mealService.tally,       
      }),
    }
  },

MealServiceController

public function edit(MealService $meal_service)
    {
        return Inertia::render('MealServices/Edit', [
            'mealService' => [
                'id' => $meal_service->id,
                'site_id' => $meal_service->site_id,
                'meal_type' => $meal_service->meal_type,
                'adults' => $meal_service->adults,
                'tally' => $meal_service->tally,
            ],
            'sites' => Auth::user()->sfa
                ->sites()
                ->orderBy('name')
                ->get()
                ->map
                ->only('id', 'name'),
        ]);
    }

MealService Model

class MealService extends Model
{
    use HasFactory;
    use SoftDeletes;

    public function resolveRouteBinding($value, $field = null)
        {
            return $this->where($field ?? 'id', $value)->withTrashed()->firstOrFail();
        }

    public function site()
    {
        return $this->belongsTo(Site::class);
    }

    public function scopeFilter($query, array $filters)
    {
        $query->when($filters['search'] ?? null, function ($query, $search) {
            $query->WhereHas('site', function ($query) use ($search) {
                $query->where('name', 'like', '%'.$search.'%');
            });
        })->when($filters['trashed'] ?? null, function ($query, $trashed) {
            if ($trashed === 'with') {
                $query->withTrashed();
            } elseif ($trashed === 'only') {
                $query->onlyTrashed();
            }
        });
    }
}

Route

Route::get('mealServices/{mealService}/edit', [MealServicesController::class, 'edit'])
->name('mealServices.edit')
->middleware('auth');

CodePudding user response:

In your edit function you are using meal_service while in your route you use mealService

Try naming the one in the edit function mealService too

  • Related