2017-05-01 3 views
0

過去30日間に表示されず、30日以上前に作成されたすべてのエントリを削除しようとしています。カラムが雄弁でクエリ内でヌルであるかどうかを確認するにはどうすればよいですか?

場合にはエントリーがcreated_at 5日前だったとみていなかったのでlast_viewed_atのデフォルト値は、nullある列は、行は削除できません取得する必要があります。

私は現在、このコードスニペットは、メディアアイテムが過去30日間に作成された場所のシナリオが含まれていませんと表示されていないので、まだ削除すべきではない

$medias = Media::where('last_viewed_at', '<=', $delete_after_x_days)->get(); 

を使用しています。

何とかして、last_viewed_atがnullの場合は、メディアが30日以上経過していることを確認するために、created_atをチェックする必要があります。

ご協力いただければ幸いです!

+0

ここでは、条件columnNameがnullの場合に使用できます –

+0

申し訳ありませんが、この私の愚かなコメントのために、私はかなり理解していません。列がnullであるかどうかだけチェックすると、それは別のクエリになります。 'last_viewed_at'が空の場合、' created_at'カラムを使用するネストされたクエリが1つ必要です。 – Chris

答えて

0

は最後に、私は@knowledgeするためのソリューションのおかげで思い付いた....のヒント。

$medias = Media::where('created_at', '<=', $delete_after_x_days) 
    ->where(function ($medias) use ($delete_after_x_days) { 
     $medias->where('last_viewed_at', '<=', $delete_after_x_days) 
      ->orWhereNull('last_viewed_at'); 
    }) 
    ->get(); 

これは、エントリがX日より古いとlast_viewed_atも30日以上経過しているか、NULLであることを確認します。

0

私はあなたが使用してどのようにあなたのモデルでは考えているが、あなたのところ条件は次のようになり、

last_viewed_at is not null and last_viewed_at<= $delete_after_x_days 
関連する問題