возвращает таблицу, кроме deleted_at (softdeletes) laravel

#laravel #return

#laravel #Возврат

Вопрос:

Я пытаюсь вернуть таблицу без удаленных строк (softdeletes)

Это мой код

 public function getMailRecipients($meoId){
    return DB::table('mail_recipients')->where('meo_id', '=', $meoId)->select('name', 'email')->get();
}
  

но я получаю все строки, даже те, которые удалены через softdeletes, что еще я должен добавить, чтобы избежать этого?

строки с программным удалением

строки с программным удалением Спасибо!

Ответ №1:

в этом случае вы используете конструктор запросов (facade DB), и вам следует сделать это:

 DB::table('mail_recipients')->where('meo_id', '=', $ meoId)->whereNull('deleted_at')->select('name', 'email')->get();
  

Если вы используете модель, вы должны использовать свойство SoftDeletes

 class Flight extends Model{
 use SoftDeletes;
}
  

подробнее см. В документации
https://laravel.com/docs/8.x/eloquent#soft-deleting

Комментарии:

1. о, хорошо, вы правы, я сделал это с моделями, и это работает, но и с вашим методом тоже, спасибо!

Ответ №2:

Примечание *: Функция мягкого удаления работает при использовании Eloquent . Если вы запрашиваете результаты с помощью query builder, вы в конечном итоге увидите, что все записи уничтожены, а не уничтожены.

Вы можете попробовать с этим:

 public function getMailRecipients($meoId)
{
    return DB::table('mail_recipients')
          ->whereNull('deleted_at')
          ->where('meo_id', $meoId)
          ->get(['name', 'email']);
}

  

Ответ №3:

Если вы попали сюда, потому что используете protected $softDelete = true в своей модели, а Laravel, похоже, игнорирует это, решение заключается use IlluminateDatabaseEloquentSoftDeletes в вашей модели. Работает каждый раз!