#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
в вашей модели. Работает каждый раз!