[英]Laravel Eloquent, return rows where both conditions are True
我有一個連接到屬性表的周表,周表看起來像這樣:-
PropID, WeekDate, Available
1 , 2015-07-04, Yes
1 , 2015-07-11, Yes
1 , 2015-07-18, No
2 , 2015-07-04, Yes
2 , 2015-07-11, No
2 , 2015-07-18, No
我想選擇第 4 周和第 11 周都可用的屬性。 在上面的示例中,我想返回帶有 PropID 1 的兩行,因為它們都可用,而沒有來自 PropID 2 的行,因為只有一周可用。
我嘗試了各種方法,但要么一無所獲,要么總是返回第一行、第二行和第四行。
我認為這很接近,但它仍然缺少一些東西,因為它正在尋找 <= AND >= 的日期
$query = Property::whereHas('Week', function($q) use ($arrive)
{
$q->where(function($sub)
{
$sub->where('WeekDate', '>=', '2015-07-04');
$sub->where('WeekDate', '<=', '2015-07-11');
});
$q->where('Available', '=', 'Yes');
})
->get();
不確定這有幫助,但屬性表只是
PropID, PropName
1 , Property 1
2 , Property 2
剛剛發現這個 SQL 有效。
SELECT PropID FROM tblweeks WHERE WeekDate
IN ('2015-07-04', '2015-07-11') AND Available
= 'yes' GROUP BY PropID HAVING COUNT(*) = 2
這將使您的結果僅作為屬性 1 :
$weeks = Property::whereHas('Week', function ($q) {
$q->where(function ($sub) {
$sub->whereIn('WeekDate', array('2015-07-04', '2015-07-11'));
$sub->where('Available', '=', 'y');
});
$q->groupBy('property_id');
$q->having('count(*)', '=', '2');
})->get();
我相信您不需要第二個嵌套查詢。
$query = Property::whereHas('Week', function($q) use ($arrive) { $q->where('WeekDate', '>=', '2015-07-04'); $q->where('WeekDate', '<=', '2015-07-11'); $q->where('Available', '=', 'Yes'); }) ->get();
更新
你有沒有研究過whereBetween 。
$query = Property::whereHas('Week', function($q) use ($arrive)
{
$q->whereBetween('WeekDate', '2015-07-04', '2015-07-11');
$q->where('Available', '=', 'Yes');
})
->get();
我在您的查詢中做了一些更改:
請檢查此解決方案
$query = Property::whereHas('Week', function($q) use ($arrive)
{
$q->where('WeekDate', '=', '2015-07-04');
$q->orWhere('WeekDate', '=', '2015-07-11');
$q->where('Available', '=', 'Yes');
})
->get();
這應該有效,並將返回期望輸出
有一些變化,查詢可能使用 group by query :
請檢查此解決方案
$query = Property::whereHas('Week', function($q) use ($arrive)
{
$q->where('WeekDate', '=', '2015-07-04');
$q->orWhere('WeekDate', '=', '2015-07-11');
$q->where('Available', '=', 'Yes');
$q->group('WeekDate');
})
->get();
這應該有效,並將返回期望輸出
whereHas
,您實際上需要兩個whereHas
:
$query = Property::whereHas('Week', function($q) use ($arrive)
{
$q->where('WeekDate', '>=', '2015-07-04');
$q->where('Available', '=', 'Yes');
})
->whereHas('Week', function($q) use ($arrive)
{
$q->where('WeekDate', '<=', '2015-07-11');
$q->where('Available', '=', 'Yes');
})
->get();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.