Отсоединить Laravel 5.3

После нескольких часов отладки и попытки решить проблему, я не нашел решения. Итак, я надеюсь, что вы можете мне помочь.

У меня есть этот маленький кусочек кода:

$removed = false;
if ($store->persons->contains($person)) {
$store->persons()->detach($person);
$removed = true;
}

var_dump($removed);

Моя проблема в том, что я не могу понять, почему $ remove всегда «ложно».
Если я прокомментирую строку $ store-> people () -> detach ($ person); все будет работать так, как ожидается, и $ удалено будет «true». Я не могу понять, почему это происходит, но я надеюсь, что вы можете мне помочь.

РЕДАКТИРОВАТЬ

public function removePerson(Request $request, $storeId, $personId)
{
$store = Store::findOrFail($storeId);
$person = Cashier::findOrFail($personId);

$removed = false;
if ($store->persons->contains($person)) {
$store->persons()->detach($person);
$removed = true;
}

return response()->json([
'removed' => $removed,
]);
}

Спасибо.

0

Решение

Метод detacth / attach не принимает полную модель в качестве аргумента, вместо этого им обоим нужен идентификатор связанной модели, поэтому в вашем случае вам необходимо передать id в метод detach для ex.

public function removePerson(Request $request, $storeId, $personId)
{
$store = Store::findOrFail($storeId);
$person = Cashier::findOrFail($personId);

$removed = false;
if ($store->persons->contains($person)) {
$store->persons()->detach($person->id); // or $personId which ever
$removed = true;
}

return response()->json([
'removed' => $removed,
]);
}
1

Другие решения

Других решений пока нет …