Удалить URL-адрес продуктов, не работающих в Laravel - PullRequest
0 голосов
/ 27 октября 2019

Я хочу, чтобы пользователь удалил товар, когда он нажимает кнопку «В отличие от», но я получаю сообщение об ошибке 404 URL-адрес не найден, но у меня есть URL-адрес.

Если я поставлю dd($product) перед $like = Like::findOrFail($product);, то отобразится id(4), но если я поставлю dd($like), то выдаст ошибку 404. Как я могу заставить эту функцию работать?.

Контроллер

 public function destroy($product)
 {
   $like = Like::findOrFail($product);
     dd($like);
   $like->delete();

  return 'done';
 }

Blade

  <a class="remove"  href="{{ route('product.unlike', ['product' => $product->id]) }}" > Unlike </a>

Маршрут

 Route::get('product/{product}/unlike', ['as' => 'product.unlike', 'uses' => 'LikeController@destroy']);

Like.php

  class Like extends Model
{
use SoftDeletes;

protected $table = 'likeables';

protected $fillable = [
    'user_id',
    'product_id',
    'likeable_id',
    'likeable_type',
];

public function products()
{
    return $this->morphedByMany('App\Product', 'likeable');
}

Ответы [ 3 ]

0 голосов
/ 27 октября 2019

Снимите продукты, соответствующие тому.

public function destroy($product)
{
    Like::where('product_id', $product)
         ->where('user_id', auth()->user()->id)
         ->delete();

    return 'done';
}
0 голосов
/ 27 октября 2019

findOrFail сгенерирует исключение, которое вызовет 404, когда он не может найти запись. Вы используете SoftDeletes, поэтому запись может существовать в базе данных, но это не значит, что она не была «мягко удалена». Если он был мягко удален, область действия заставит его действовать так, как будто его там нет.

Проверьте вашу запись с помощью id == 4, чтобы увидеть, имеет ли она столбец deleted_at со значением. Если это так, он был удален (мягкое удаление). Вам нужно будет скорректировать свой запрос, чтобы иметь возможность извлекать мягкие удаленные записи.

Документы Laravel 6.x - Eloquent - Soft Deletes - Запрос моделей Soft Deleted

0 голосов
/ 27 октября 2019

запрос на удаление должен быть post request not get

web.php

Route::delete('product/{product}/unlike','LikeController@destroy')->name('product.unlike');

blade.php

<form action="{{ route('product.unlike',[$product->id]) }}" method="post">
 @csrf
 @method('DELETE')
 <button type="submit" class="remove"> Unlike </button>
</form>

controller

use App\Product;

...

public function destroy(Product $product) {
 $product->delete(); 
 return 'done'; 
}

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

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