2016-02-04 17 views
7

varsa:laravel modeli activated_at kapsamı ve deactivated_at çek bir modeli kapsam kullanılması 7 gün fark

public function scopeApproved($query) 
{ 
    return $query->where('activated_at', '>=', 'deactivated_at' -7 days); 
} 

Bu geçersiz sözdizimi olduğunu biliyoruz ama ben başarmak için çalışıyorum açık ne olabileceğini düşündüm.

onlar daha sonra 7 gün bunu başarmak için uygun bir yol yoktur emin değilim birbirinden

+0

Sütunlardan biri veya her ikisi de NULL olduğunda beklenen davranış nedir? – BrokenBinary

cevap

2

olan tüm örneklerini almak istiyorum aynı tabloda iki alan vardır 'deactivated_at' 'activated_at' ve Eloquent aracılığıyla, MySQL işlevini DATEDIFF kullanabilirsiniz.

// in your model 
public function scopeApproved($query) { 
    $query->whereRaw("DATEDIFF('activated_at','deactivated_at') >= 7"); 
} 

Bu kullandığınız veritabanı sürücüsü bağlıdır (yani MySQL, SQLite, SQL sunucusu, ....)

DÜZENLEME: Başka

Bulunan şey gibi bir şey deneyin bu MySQL ile (şimdiye kadar) çalışır:

// in your model 
public function scopeApproved($query) { 
    $query->whereRaw("TO_DAYS(activated_at) - TO_DAYS(deactivated_at) >= 7"); 
} 

TO_DAYS MySQL fonksiyonunda bir yapı olma.

+0

bu işe yaramıyor. –

+0

Alanları çevreleyen alıntılar olmadan denediniz mi? '$ Query-> whereRaw gibi (" DATEDIFF (activate_at, deactivated_at)> = 7 ");' – shempignon

+0

evet. bunu başarı ile denedim. –

3

Shempigon cevap sadece olan bir konu, sen tek alıntı sütunlar adını sarın yoktur ve ayrıca tarihleri ​​açık olması neredeyse doğrudur, böyle bir şey:

public function scopeApproved($query) { 
    $query->whereRaw("DATEDIFF(deactivated_at, activated_at) >= 7"); 
} 

Bu beklentiden nedeni Bu girdi: DATEDIFF(endDate, starDate), DATEDIFF hakkında daha fazla bilgi edinebilirsiniz here