2016-05-07 9 views
1

私は、条件に基づいていくつかのレコードを取得するために雄弁を使用しています。Laravel 5.2:Elequent deleted_at Null /!Null with where句とカウント

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

最初の1つは、0が正しいことを返します。 しかし、もう1つは0です。代わりに1でなければなりません。

表:

Table Data

私は何かが足りないのですか?

<?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レコードを返しますが、これと同様の方法であなたのタスクモデルでSoftDeletesを使用していると仮定

+0

softDeletesを使用していますか?次に、あなたのステートメントでTask :: withTrashedを使用します。 – codedge

+0

はい、私はソフト削除を使用しています、私は質問を更新しました。どうぞご覧ください – Gammer

+0

あなたの仕事モデルを共有できますか? –

答えて

2

は書き込まれますが、deleted_atがnullのレコードは除外されます。

deleted_atがnullのレコードと共に、deleted_atがいっぱいになっているレコードを返すwithTrashedメソッドもあります。

SoftDeletを使用している場合は、通常はdeleted_at列に直接問い合わせるのではなく、提供された方法を使用する必要があります。デフォルトでは、deleted_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