2016-05-07 4 views
1

Я использую красноречивый выбор некоторых записей на основе условия.Laravel 5.2: Elequent deleted_at Null /! Null with where clause и count

$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(); 

Первый возвращает 0, который является правильным. Но второй возвращает 0, который вместо этого должен быть 1.

Таблица:

Table Data

Я-то отсутствует?

+0

Вы используете softDeletes? Затем в своих заявлениях используйте Task :: withTrashed. – codedge

+0

Да, я использую мягкие удаления, я обновил вопрос. Пожалуйста, посмотрите – Gammer

+0

Можете ли вы поделиться своей моделью задач. –

ответ

2

Предположив вы используете SoftDeletes в модели Task аналогично этому:

<?php 

namespace App; 

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

class Task extends Model 
{ 
    use SoftDeletes; 

Тогда ваши запросы должны выглядеть следующим образом:

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

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

onlyTrashed метод возвращает записи, где deleted_at заполняется, но исключает записи, где deleted_at имеет значение NULL.

Существует также метод withTrashed, который возвращает записи, где deleted_at заполняется вместе с записями, где deleted_at имеет значение NULL.

Как правило, вы должны избегать запроса столбца deleted_at непосредственно при использовании SoftDeletes и вместо этого использовать предоставленные методы. По умолчанию будут исключены все записи, в которых будет удаляться delete_at.

Вы также должны убедиться, что вы использовали метод softDeletes() в своих миграциях, чтобы колонка была правильно настроена в вашей базе данных.

+0

Ты мужчина! Спасибо, чувак, он сработал – Gammer

0

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

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

Чтобы получить только мягких удаления, использовать onlyTrashed():

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

Чтобы получить все записи:

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

Подробнее: https://laravel.com/docs/5.2/eloquent#querying-soft-deleted-models