detach () в сводной таблице - PullRequest
0 голосов
/ 05 мая 2018

Не могу понять, как удалить запись из сводной таблицы.

У меня есть users, который принадлежит ToMany documents с сводной таблицей document_user.

вот мой метод присоединения:

public function share(Request $request, $company_id, $id)
{
    $document = Document::find($id);
    $user = $request['user'];
    $document->users()->attach($user);
    flash('Document has been shared!');
    return back();
}

Но как сделать функцию отсоединения? Должен ли я построить форму для этого и какой должна быть функция? Что-то вроде $document->users()-detach($user). Я пробовал это, но не работает

1 Ответ

0 голосов
/ 05 мая 2018

Вы можете сделать это несколькими способами:

Во-первых, вы можете использовать функцию detach () (требуется вторая функция в вашем контроллере). Пример использования формата, аналогичного предоставленному вами:

public function unshare(Request $request, $id)
{
    $document = Document::findOrFail($id);
    $userId = $request['user']; //Assuming this is the User ID
    $user = User::findOrFail($userId);
    $user->documents()->detach($document->id);
    flash('Document has been detached!');
    return back();
}

Во-вторых, вы можете создать одну функцию, которая переключает ассоциацию. По сути, вы отправляете идентификатор документа, и если он уже связан с пользователем, он отсоединяется, если он НЕ связан с пользователем, он будет присоединен.

public function share(Request $request, $id)
{
    $document = Document::findOrFail($id);
    $userId = $request['user']; //Assuming this is the User ID
    $user = User::findOrFail($userId);
    $user->documents()->toggle($document->id); //This can also be an array of IDs
    flash('Document has been toggled!'); //You might want to pass something or look up the association if you want custom messaging for attach or detach
    return back();
}

Надеюсь, это поможет!

...