API RESTful Laravel 6.x Лучшая практика для отношений многих ко многим - PullRequest
2 голосов
/ 06 февраля 2020

Я разрабатываю API с Laravel 6.

У меня есть 2 модели:

карта -> настольные карты с card_id e cc.

пользователь -> пользователи таблицы с user_id e cc.

Я определил в моделях отношения многие ко многим

Пользователь. php

public function cards()
{
    return $this->belongsToMany('App\Models\v1\Card');
}

Карта. php

public function users() {
    return $this->belongsToMany('App\Models\v1\User');
}

Сводная таблица называется card_user.

Теперь я создал маршруты для отдельных объектов:

Route::resource('v1/users', 'v1\UsersController');
Route::resource('v1/cards', 'v1\CardsController');

и мне нужно разработать маршруты и контроллер для вставки и удаления строк из сводной таблицы.

Каков наилучший способ решения этой проблемы?

Я пытаюсь решить эту проблему с помощью специального контроллера, который отвечает на указанную конечную точку c:

Route::resource('v1/cards/{id}/users', 'v1\CardsUsersController')->only([
    'index', 'store', 'destroy'
]);

Но когда мне нужно хранить информацию, мне нужно передать идентификаторы карты и пользователь в URL и как объект в теле сообщения, например:

[
    'user_id' => $userId,
    'card_id' => $cardId
]

Существует ли лучший способ сделать это?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Вы можете использовать вложенные ресурсы, как описано здесь: https://laravel.com/docs/6.x/controllers#restful -nested-resources

"Иногда вам может потребоваться определить маршруты к" вложенным "ресурсам. Например, ресурс фотографии может иметь несколько «комментариев», которые могут быть прикреплены к фотографии. Чтобы «вкладывать» контроллеры ресурсов, используйте обозначение «точка» в объявлении маршрута:

Route::resource('photos.comments', 'PhotoCommentController');

Этот маршрут зарегистрирует «вложенный» ресурс, доступ к которому можно получить по следующим URL-адресам: фотографии / {фотографии} / комментарии / {комментарии}. "

1 голос
/ 06 февраля 2020

Если у вас должны быть отдельные маршруты и контроллер для них, то было бы лучше сделать

Route::resource('v1/card_user', 'v1\CardsUsersController')->only(['index', 'store','destroy']);

Содержать маршрут в чистоте и не перегружать его. Вы или кто-то еще в будущем, кто просматривает код, должен понимать, для чего он нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...