Как получить только те записи, которые не были удалены из базы данных в Laravel? - PullRequest
0 голосов
/ 01 ноября 2019

Я рекомендую таблицу, в которой есть столбцы product_id, user_id и deleted_at, и я хочу отобразить наиболее просматриваемые продукты в представлении, и оно работает нормально, но проблемы возникают, когда пользователь удаляет продукт, я получаю ошибкуtrying to get property of non object и столбец deleted_at в таблице рекомендует все еще показывает ноль, даже если продукт удален. Как сделать так, чтобы продукт исчез в таблице рекомендаций после удаления продукта, и в представлении должны отображаться только продукты, которые не были удалены?

Контроллер

  $recommends = Recommends::with('product')
    ->select('product_id', DB::raw('COUNT(*) AS total'))
    ->whereNotNull('product_id')
    ->groupBy('product_id')
    ->orderby('total', 'DESC')
    ->take(12)
    ->get();

Recommended.php

 <?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Recommends extends Model
{
public function product()
{
    return $this->belongsTo('App\Product','product_id')
}
}

Product.php

 public function recommends()
 {
    return $this->hasMany('App\Recommends','product_id');
 }

1 Ответ

1 голос
/ 01 ноября 2019

Попробуйте с помощью wherehas(), он проверит, существует продукт или нет:

$recommends = Recommends::with('product')
    ->select('product_id', DB::raw('COUNT(*) AS total'))
    ->whereNotNull('product_id')
    ->wherehas('product')
    ->groupBy('product_id')
    ->orderby('total', 'DESC')
    ->take(12)
    ->get();

А также при удалении продукта удалите все рекомендации для этого продукта.

Изменение модели товара,

protected static function boot() {
   parent::boot();

   static::deleting(function($product) {
     $product->recommends()->delete();
   });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...