2016-05-07 8 views
1

Ich verwende eloquent, um einige Datensätze auf der Grundlage der Bedingung zu holen.Laravel 5.2: Elequent deleted_at Null /! Null mit where-Klausel und zählen

$completed = Task::where('user_id', Auth::user()->id)->where('deleted_at', '=', !Null)->get()->count(); 

$incompleted = Task::where('user_id', Auth::user()->id)->where('deleted_at', '=', Null)->get()->count(); 

Die erste gibt die 0 korrekt ist. Aber der zweite gibt 0 zurück, der stattdessen 1 sein sollte.

Tabelle:

Table Data

ich etwas fehle?

+0

Verwenden Sie SoftDeletes? Verwenden Sie anschließend Task :: withTrashed in Ihren Anweisungen. – codedge

+0

Ja, ich benutze weiche Löschungen, ich habe die Frage aktualisiert. Bitte werfen Sie einen Blick auf – Gammer

+0

Können Sie Ihr Aufgabenmodell teilen. –

Antwort

2

Vorausgesetzt, Sie SoftDeletes in Ihrem Task-Modell in einer ähnlichen Weise wie diese verwenden:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 
use Illuminate\Database\Eloquent\SoftDeletes; 

class Task extends Model 
{ 
    use SoftDeletes; 

Dann sollten Sie Ihre Anfragen wie folgt aussehen:

$completed = Task::where('user_id', Auth::user()->id)->onlyTrashed()->get()->count(); 

$incompleted = Task::where('user_id', Auth::user()->id)->get()->count(); 

Die onlyTrashed Methode gibt Datensätze, bei denen deleted_at ist gefüllt, schließt jedoch Datensätze aus, bei denen deleted_at null ist.

Es gibt auch eine withTrashed-Methode, die Datensätze zurückgibt, bei denen deleted_at zusammen mit Datensätzen gefüllt ist, bei denen deleted_at null ist.

Als allgemeine Regel sollten Sie vermeiden, direkt bei der Verwendung von SoftDeletes die deleted_at-Spalte abzufragen und stattdessen die bereitgestellten Methoden zu verwenden. Standardmäßig werden alle Datensätze ausgeschlossen, bei denen deleted_at gefüllt ist.

Sie sollten auch sicherstellen, dass Sie die Methode softDeletes() in Ihren Migrationen verwendet haben, damit die Spalte in Ihrer Datenbank korrekt eingerichtet wird.

+0

Sie sind der Mann! Danke, es hat geklappt – Gammer

0

Unter der Annahme, wie Sie gesagt haben, Sie sind weich Löschungen verwenden, brauchen Sie nichts Besonderes zu tun, alle nicht gelöschten Datensätze zurück:

$completed = Task::where('user_id', Auth::user()->id) 
       ->get() 
       ->count(); // according to your DB screenshot this should be '3' 

Um nur die weichen Löschungen zu bekommen, verwenden onlyTrashed():

$notCompleted = Task::where('user_id', Auth::user()->id) 
       ->onlyTrashed() 
       ->get() 
       ->count(); // according to your DB screenshot this should be '2' 

alle Datensätze zu erhalten:

$tasks = Task::where('user_id', Auth::user()->id) 
       ->withTrashed() 
       ->get() 
       ->count(); // according to your DB screenshot this should be '5' 

Mehr hier: https://laravel.com/docs/5.2/eloquent#querying-soft-deleted-models