А, нет, оказывается ошибка. Некоторые посты успешно удаляются, а некоторые нет: Call to a member function delete() on null Странно очень, в чем дело? Погуглил, но толком ничего не понял, потому что сбивает еще вот что: к примеру, нахожусь здесь /show/13, после кнопки удалить переходит в /2, то есть с другим id. Кроме этого, видел примеры, где спрашивают почему в принципе не работает, а у меня сработало с одним объявлением один раз, а остальные удалять не хочет Маршрут: PHP: Route::delete('room/{id}', 'RoomController@destroy')->name('room.destroy'); Форма: HTML: <form action="{{ route('room.destroy', ['id'=>$room->id]) }}" method="post" onsubmit="if(confirm('Точно удалить объявление?')) { return true } else return false"> @csrf @method('DELETE') <input type="submit" class="btn btn-outline-danger" value="Удалить"> </form> Контроллер: PHP: public function destroy($id) { $room = Room::find($id); $room->delete(); return redirect()->route('room.index')->with('success', 'Объявление успешно удалено!'); } p.s. попробовал изменить find на findorFail, вылезает ошибка 404 и в адресной строке /room/2, хотя до нажатия на кнопку я находился на /room/show/6, опять же другой id. Почему так происходит?
Кстати, вот еще что. Попробовал сделать так, чтобы нельзя было совершать действия с объявлением, автором которого пользователь не является. Добавил в метод update такую строчку: PHP: if ($room->person_id != \Auth::user()->id) { return redirect()->route('room.index')->withErrors('Вы не можете редактировать чужое объявление'); } У меня есть догадка. Возможно, это из-за того, что у меня таблица people не связана с таблицей users (кроме как внешним ключом); то есть \Auth::user пытается соединиться с таблицей users, а у меня $room->person_id относится к таблице rooms, а поле person_id там внешний ключ от таблицы people (см. вложение). Как это безболезненно исправить? Потому что вылезает ошибка, что я не являюсь автором данного объявления
Чудес не бывает, значит каким-то образом логическая ошибка в программе приводит к тому, что в $room->id появляется не тот идентификатор. Такое бывает, когда перемудришь с джоинами. Решение - в запросе с join-ами указать select так, чтобы id из других таблиц не закрывали id из главной --- Добавлено --- А ты связи Laravel используешь в принципе? Или пишешь всё прямо на запросах?