2017-04-04 186 views
2

遇到問題我真的要設置像這樣的消極條件:Laravel /雄辯WHERE NOT子查詢

WHERE NOT("last_day" "<=" $first_day OR "first_day" "<=" $last_day) 

我的查詢生成器看起來像這樣ATM:

$query = $query->where(function ($query) use ($first_day, $last_day) { 
    $query->where('last_day', '<=', $first_day); 
    $query->orWhere('first_day', '<=', $last_day); 
}); 

我想它是因此:

$query = $query->whereNot(function ($query) use ($first_day, $last_day) { 
    $query->where('last_day', '<=', $first_day); 
    $query->orWhere('first_day', '<=', $last_day); 
}); 

回顧:我想在一個負的WHERE條件內的OR語句。我怎樣才能做到這一點?

來源:http://baodad.blogspot.nl/2014/06/date-range-overlap.html

+0

我不認爲你的操作數是正確的。你究竟在檢查什麼? – aynber

+0

他們確實沒有,我會編輯,並完全指定 – MrMedicine

+0

基本上我正在嘗試做的是:http://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap – MrMedicine

回答

0

您可以用邏輯

$query = $query->where(function ($query) use ($first_day, $last_day) { 
    $query->where('last_day', '>', $first_day); 
    $query->where('first_day', '>', $last_day); 
}); 
+0

我不要認爲邏輯是一樣的,它不符合:「艾倫的區間代數」:https://en.wikipedia.org/wiki/Allen%27s_interval_algebra – MrMedicine

+0

更改:$ query->其中('first_day',' >',$ last_day);到$ query-> where('first_day','<',$ last_day);和它的正確,請參閱:http://stackoverflow.com/questions/43233652/eloquent-mysql-statement-where-nota-or-b – MrMedicine