In laravel I have these Models that describe a day event in which people participate to activities.
Each event has many activities but an activity belongs only to one event.
I cannot manage to write a route that allows me to get the activities of a given event.
Model Event
<?php
namespace App\Models;
use App\Models\Activity;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Event extends Model
{
use HasFactory;
protected $table = 'events';
protected $fillable = [
'label',
'date',
'activities',
'cassetteOperations',
'bankOperations'
];
/**
* Get all of the event's activities.
*/
public function activities(): HasMany
{
return $this->hasMany(Activity::class);
}
}
Model Activity
<?php
namespace App\Models;
use App\Models\Participation;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
class Activity extends Model
{
use HasFactory;
protected $fillable = [
'label',
'event_id',
'memberPrice',
'otherPrice',
'memberEntryFee',
'otherEntryFee',
'type',
'participations'
];
/**
* Get the participations for the activity
*/
public function participations(): HasMany
{
return $this->hasMany(Participation::class);
}
/**
* Get the event associated with the activity
*/
public function event(): HasOne
{
return $this->hasOne(Event::class);
}
/**
* Get the persons that participates to this activity
*
*/
public function participants(): HasManyThrough
{
return $this->hasManyThrough(Person::class, Participation::class);
}
}
In the App/Http/Api/ActivityController I have
<?php
namespace App\Http\Controllers\Api;
use App\Models\Event;
use App\Models\Activity;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Resources\ActivityResource;
use App\Http\Requests\StoreActivityRequest;
class ActivityController extends Controller
{
public function index($event_id)
{
return ActivityResource::collection(Activity::where('event_id', $event_id)->orderBy('id')->get());
}
public function store(StoreActivityRequest $request)
{
Activity::create($request->validated());
//return only activities bound to the event
return ActivityResource::collection(Activity::where('event_id', $request->event_id)->orderBy('id')->get());
}
}
In routes/api I have
Route::middleware(['auth:sanctum'])->get('/user', function (Request $request) {
return $request->user();
});
Route::apiResource('person',PersonController::class)->middleware(['auth'])->middleware('App\Http\Middleware\Allowed');
Route::apiResource('event',EventController::class)->middleware(['auth'])->middleware('App\Http\Middleware\Allowed');
Route::get('activity/{event_id}',[ActivityController::class,'index'])->middleware(['auth'])->middleware('');
Route::apiResource('activity',ActivityController::class)->middleware(['auth'])->middleware('App\Http\Middleware\Allowed');
When in my vue project I target the following
async apiFetchEventActivities(event_id) {
try {
await axios.get('sanctum/csrf-cookie')
this.activityErrors = []
const { data } = await axios.get('/api/activity/' + event_id)
this.activities = data.data
} catch ({ response }) {
this.activityErrors = [response.data.message, response.status]
return ('failure')
}
}
I get a error status 500 with "message": "Target class [] does not exist.",
Is my route (the one before last in routes/api) not correct and why ?
How should I write it?