在 Laravel 中,我有这些模型来描述人们参与活动的一天事件。 每个事件有多个活动,但一个活动只属于一个事件。 我无法编写一条路线来获取给定事件的活动。
模特活动
<?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);
}
}
模特活动
<?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);
}
}
在 App/Http/Api/ActivityController 我有
<?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());
}
}
在routes/api我有
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');
在我的 vue 项目中,我的目标如下
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')
}
}
我收到错误状态 500,其中包含“消息”:“目标类 [] 不存在。”,
我的路线(routes/api 中最后一条路线)是否不正确,为什么? 应该怎么写呢?
错误消息“目标类 [] 不存在”通常意味着 Laravel 找不到您要使用的类。在您的情况下,路由定义中的中间件似乎是空的,这可能会导致问题。
Route::get('activity/{event_id}',[ActivityController::class,'index'])->middleware(['auth'])->middleware('');
您应该删除空的中间件:
Route::get('activity/{event_id}',[ActivityController::class,'index'])->middleware(['auth']);
此外,请确保
ActivityController
已正确导入到路线文件的顶部。如果不是,请在您的 routes/api.php
文件顶部添加此行:
use App\Http\Controllers\Api\ActivityController;
最后,确保您的
ActivityController
命名空间正确并且文件位于正确的目录中。根据您的代码,它应该位于app/Http/Controllers/Api/ActivityController.php
。