Почему SoftDelete не подделывает удаленную строку?

Может кто-нибудь сказать мне, почему с помощью delete() метод не удалит выбранную строку в таблице? SoftDelete работает хорошо, но строка, которая была мягко удалена, все еще существует в таблице. Я ожидаю, что моя строка таблицы будет скрыта или удалена, но не может. Любые советы или помощь приветствуются!:) я SoftDelete мой стол такой.

контроллер:

public function hideApprovalsDocument(Request $request, Document $id)
{
    //Getting the request in the View.
    $id = $request->get('softDelete');
    $hide = Document::findOrFail($id)->where('id', '=', $id);
    $hide->delete();

    return redirect()->back();

}

public function documentsSentForApproval()
{

    $pendingDocuments = DB::table('approvals_document')
        ->select('documents.title', 'documents.content', 'documents.id as documentId', 
            'categories.category_type',
            'users.username', 'approvals_document.created_at',
            'approvals_document.id', 'approvals_document.approver_id', 'approvals_document.requestedBy')
        ->join('documents', 'documents.id', '=', 'approvals_document.document_id')
        ->join('categories', 'categories.id', '=', 'documents.category_id')
        ->join('users', 'users.id', '=', 'approvals_document.approver_id')
        ->where('approver_id', '=', Auth::id())
        ->where('documents.deleted_at', '=', null)
        ->orWhere('requestedBy', '=', Auth::id())
        ->orderBy('approvals_document.id', '=', 'desc')
        ->paginate(10);

    return view ('document.pending')
        ->with('pendingDocuments', $pendingDocuments);

}

3 ответа

Решение

Можете ли вы изменить запрос на присоединение к ниже

->join('documents', function ($join) `{ $join->on('documents.id', '=','approvals_document.document_id') 
->whereNull('documents.deleted_at'); })`

Мягкое удаление не удалит строку. Он установит метку времени для deleted_at field и eloquent будут игнорировать все строки, для которых установлено значение для поля deleted_at, Если вы реализовали мягкое удаление и хотите навсегда удалить строку, попробуйте использовать 'forceDelete()'

$hide->forceDelete();

Вы не можете сделать никакого сравнения с NULL значение в Laravel SQL через where метод. Вы можете использовать whereRaw метод:

public function documentsSentForApproval()
{

    $pendingDocuments = DB::table('approvals_document')
        ->select('documents.title', 'documents.content', 'documents.id as documentId', 
            'categories.category_type',
            'users.username', 'approvals_document.created_at',
            'approvals_document.id', 'approvals_document.approver_id', 'approvals_document.requestedBy')
        ->join('documents', function ($join) {
            $join->on('documents.id', '=', 'approvals_document.document_id')
                ->whereRaw('documents.deleted_at IS NULL');
        })
        ->join('categories', 'categories.id', '=', 'documents.category_id')
        ->join('users', 'users.id', '=', 'approvals_document.approver_id')
        ->where('approver_id', '=', Auth::id())
        ->orWhere('requestedBy', '=', Auth::id())
        ->orderBy('approvals_document.id', '=', 'desc')
        ->paginate(10);

    return view ('document.pending')
        ->with('pendingDocuments', $pendingDocuments);

}

Обновить

Присоединение мягко удаленных записей должно быть изменено

Другие вопросы по тегам