Laravel: как написать маршрут для получения связи hasMany? ⇐ Php
Laravel: как написать маршрут для получения связи hasMany?
В Laravel у меня есть модели, описывающие дневное мероприятие, в котором люди участвуют в мероприятиях. Каждое событие имеет множество действий, но действие принадлежит только одному событию. Мне не удается написать маршрут, который позволит мне получать информацию о действиях данного события.
Событие модели
пространство имен App\Models; используйте Приложение\Модели\Активность; используйте Illuminate\Database\Eloquent\Model; используйте Illuminate\Database\Eloquent\Relations\HasMany; используйте Illuminate\Database\Eloquent\Factories\HasFactory; класс Event расширяет модель { используйте HasFactory; защищенная таблица $ = 'события'; защищенный $fillable = [ 'этикетка', 'дата', 'деятельность', 'Операции с кассетой', «банковские операции» ]; /** * Получите все мероприятия мероприятия. */ деятельность публичной функции(): HasMany { вернуть $this->hasMany(Activity::class); } } Действия модели
пространство имен App\Models; используйте Приложение\Модели\Участие; используйте Illuminate\Database\Eloquent\Model; используйте Illuminate\Database\Eloquent\Relations\HasOne; используйте Illuminate\Database\Eloquent\Relations\HasMany; используйте Illuminate\Database\Eloquent\Factories\HasFactory; используйте Illuminate\Database\Eloquent\Relations\HasManyThrough; Класс Activity расширяет модель { используйте HasFactory; защищенный $fillable = [ 'этикетка', 'идентификатор_события', 'memberPrice', 'другая цена', 'memberEntryFee', 'другая плата за вход', 'тип', «участие» ]; /** * Получите участие в мероприятии */ участие в публичной функции(): HasMany { вернуть $this->hasMany(Participation::class); } /** * Получить событие, связанное с действием */ публичная функция event(): HasOne { вернуть $this->hasOne(Event::class); } /** * Привлеките людей, которые участвуют в этом мероприятии. * */ участники публичной функции(): HasManyThrough { return $this->hasManyThrough(Person::class, Participation::class); } } В App/Http/Api/ActivityController у меня есть
пространство имен App\Http\Controllers\Api; используйте приложение\модели\событие; используйте Приложение\Модели\Активность; используйте Illuminate\Http\Request; используйте App\Http\Controllers\Controller; используйте App\Http\Resources\ActivityResource; используйте App\Http\Requests\StoreActivityRequest; класс ActivityController расширяет контроллер { индекс публичной функции ($ event_id) { return ActivityResource::collection(Activity::where('event_id', $event_id)->orderBy('id')->get()); } общедоступное хранилище функций (StoreActivityRequest $request) { Activity::create($request->validated()); //возвращаем только действия, связанные с событием return ActivityResource::collection(Activity::where('event_id', $request->event_id)->orderBy('id')->get()); } } В routes/api у меня есть
Route::middleware(['auth:sanctum'])->get('/user', function (Request $request) { вернуть $request->user(); }); Route::apiResource('person',PersonController::class)->промежуточное ПО(['auth'])->промежуточное ПО('App\Http\Middleware\Allowed'); Route::apiResource('event',EventController::class)->промежуточное ПО(['auth'])->промежуточное ПО('App\Http\Middleware\Allowed'); Route::get('activity/{event_id}',[ActivityController::class,'index'])->middleware(['auth'])->middleware(''); Route::apiResource('activity',ActivityController::class)->промежуточное ПО(['auth'])->промежуточное ПО('App\Http\Middleware\Allowed'); В моем проекте vue я ориентируюсь на следующее
async apiFetchEventActivities(event_id) { пытаться { ожидайте axios.get('sanctum/csrf-cookie') this.activityErrors = [] const { data } = await axios.get('/api/activity/' + event_id) this.activities = data.data } поймать ({ответ}) { this.activityErrors = [ответ.данные.сообщение, ответ.статус] возврат («неудача») } } Я получаю сообщение об ошибке 500 с сообщением: «Целевой класс [] не существует».
Является ли мой маршрут (предпоследний в маршрутах/api) неверным и почему? Как мне это написать?
В Laravel у меня есть модели, описывающие дневное мероприятие, в котором люди участвуют в мероприятиях. Каждое событие имеет множество действий, но действие принадлежит только одному событию. Мне не удается написать маршрут, который позволит мне получать информацию о действиях данного события.
Событие модели
пространство имен App\Models; используйте Приложение\Модели\Активность; используйте Illuminate\Database\Eloquent\Model; используйте Illuminate\Database\Eloquent\Relations\HasMany; используйте Illuminate\Database\Eloquent\Factories\HasFactory; класс Event расширяет модель { используйте HasFactory; защищенная таблица $ = 'события'; защищенный $fillable = [ 'этикетка', 'дата', 'деятельность', 'Операции с кассетой', «банковские операции» ]; /** * Получите все мероприятия мероприятия. */ деятельность публичной функции(): HasMany { вернуть $this->hasMany(Activity::class); } } Действия модели
пространство имен App\Models; используйте Приложение\Модели\Участие; используйте Illuminate\Database\Eloquent\Model; используйте Illuminate\Database\Eloquent\Relations\HasOne; используйте Illuminate\Database\Eloquent\Relations\HasMany; используйте Illuminate\Database\Eloquent\Factories\HasFactory; используйте Illuminate\Database\Eloquent\Relations\HasManyThrough; Класс Activity расширяет модель { используйте HasFactory; защищенный $fillable = [ 'этикетка', 'идентификатор_события', 'memberPrice', 'другая цена', 'memberEntryFee', 'другая плата за вход', 'тип', «участие» ]; /** * Получите участие в мероприятии */ участие в публичной функции(): HasMany { вернуть $this->hasMany(Participation::class); } /** * Получить событие, связанное с действием */ публичная функция event(): HasOne { вернуть $this->hasOne(Event::class); } /** * Привлеките людей, которые участвуют в этом мероприятии. * */ участники публичной функции(): HasManyThrough { return $this->hasManyThrough(Person::class, Participation::class); } } В App/Http/Api/ActivityController у меня есть
пространство имен App\Http\Controllers\Api; используйте приложение\модели\событие; используйте Приложение\Модели\Активность; используйте Illuminate\Http\Request; используйте App\Http\Controllers\Controller; используйте App\Http\Resources\ActivityResource; используйте App\Http\Requests\StoreActivityRequest; класс ActivityController расширяет контроллер { индекс публичной функции ($ event_id) { return ActivityResource::collection(Activity::where('event_id', $event_id)->orderBy('id')->get()); } общедоступное хранилище функций (StoreActivityRequest $request) { Activity::create($request->validated()); //возвращаем только действия, связанные с событием return ActivityResource::collection(Activity::where('event_id', $request->event_id)->orderBy('id')->get()); } } В routes/api у меня есть
Route::middleware(['auth:sanctum'])->get('/user', function (Request $request) { вернуть $request->user(); }); Route::apiResource('person',PersonController::class)->промежуточное ПО(['auth'])->промежуточное ПО('App\Http\Middleware\Allowed'); Route::apiResource('event',EventController::class)->промежуточное ПО(['auth'])->промежуточное ПО('App\Http\Middleware\Allowed'); Route::get('activity/{event_id}',[ActivityController::class,'index'])->middleware(['auth'])->middleware(''); Route::apiResource('activity',ActivityController::class)->промежуточное ПО(['auth'])->промежуточное ПО('App\Http\Middleware\Allowed'); В моем проекте vue я ориентируюсь на следующее
async apiFetchEventActivities(event_id) { пытаться { ожидайте axios.get('sanctum/csrf-cookie') this.activityErrors = [] const { data } = await axios.get('/api/activity/' + event_id) this.activities = data.data } поймать ({ответ}) { this.activityErrors = [ответ.данные.сообщение, ответ.статус] возврат («неудача») } } Я получаю сообщение об ошибке 500 с сообщением: «Целевой класс [] не существует».
Является ли мой маршрут (предпоследний в маршрутах/api) неверным и почему? Как мне это написать?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Основные связи EF «один ко многим» HasOne().WithMany() и HasMany().WithOne()
Anonymous » » в форуме C# - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-