1138 0 0 0
Last Updated : 2025-04-28 23:54:53
Here is a sample of a complicated query that includes where and with and inner queries. This snuppet is the one used to get the legislative event stream on the dashboard in the GovIQ project.
$memberId = Auth::user()->id ;
$allResultsArray = [];
$months = 36 ; //Please set this to 2 months when the feeds works perfectly, Now three years.
$dateLimit = time() - $months*31*24*60*60 ; //Two Months Earlier
$dateLimit = date("Y-m-d 00:00:00",$dateLimit) ;
$qqAllNewProvincial = ProvincialBillModel::with([
'events'=>function($eventQ2) use ($dateLimit){
###$eventQ2->where('date', '>=', "$dateLimit")->groupby('bill_id')->orderBy('date','desc');
//$eventQ2->where('date', '>=', "$dateLimit")->orderBy('date','desc')->first();
$eventQ2->where('date', '>=', "$dateLimit")->orderBy('date','desc');
}
])->whereHas(
'events',function($eventQ) use ($dateLimit){
$eventQ->where('date', '>=', "$dateLimit");
})->whereHas(
'favorites',function($favoriteQ) use ($memberId){
$favoriteQ->where('user_id',$memberId);
}
)->get();
$qqAllNewFederal = FederalBillModel::with([
'events'=>function($eventQ2) use ($dateLimit){
###$eventQ2->where('date', '>=', "$dateLimit")->groupby('bill_id')->orderBy('date','desc');
//$eventQ2->where('date', '>=', "$dateLimit")->groupby('bill_id')->orderBy('date','desc');
$eventQ2->where('date', '>=', "$dateLimit")->orderBy('date','desc');
//$eventQ2->where('date', $eventQ2->max('date'))->where('date', '>=', "$dateLimit")->groupby('bill_id');
###$eventQ2->where('date', '>=', "$dateLimit")->orderBy('date','desc')->first();
}
])->whereHas(
'events',function($eventQ) use ($dateLimit){
$eventQ->where('date', '>=', "$dateLimit");
})->whereHas(
'favorites',function($favoriteQ) use ($memberId){
$favoriteQ->where('user_id',$memberId);
}
)->get();
$finalMergedResults = $qqAllNewFederal->merge($qqAllNewProvincial);
Another Sample is as follows :
$records = BillEventModel::where('date', '<', "$date100BeforeStartdate")->with(['bill', 'provincialBill'])
->whereHas(
'bill',function($billQ) use ($date100BeforeStartdate){
$billQ->whereHas(
'lastEvent',function($QQe) use ($date100BeforeStartdate) {
$QQe->where('date', '<', $date100BeforeStartdate);
}
);
})->orWhereHas(
'provincialBill',function($billQ) use ($date100BeforeStartdate){
$billQ->whereHas(
'lastEvent',function($QQe) use ($date100BeforeStartdate) {
$QQe->where('date', '<', $date100BeforeStartdate);
}
);
})
->orderBy('updated_at','desc')
->get()
->unique('bill_id', 'eventType');
->toArray();
And here is a new one as well:
$finalMergedResults = collect();
//FEDERAL BILLS
$records = new \App\Bill();
$records = $records->newQuery();
//$records->with(['bill', 'bill.sponsor', 'bill.sponsorSenator', 'provincialBill']);
$records->with('lastEvent');
$records->whereHas(
'lastEvent',function($QQe) use ($date100BeforeStartdate) {
$QQe->where('date', '<', $date100BeforeStartdate);
}
);
//$records->with('events');
$records = $records->get()->toArray();
$finalMergedResults = $finalMergedResults->merge($records);
//PROVINCIAL BILLS
$recordsProvincial = new \App\ProvincialBill();
$recordsProvincial = $recordsProvincial->newQuery();
//$recordsProvincial->with(['bill', 'bill.sponsor', 'bill.sponsorSenator', 'provincialBill']);
$recordsProvincial->with('lastEvent');
$recordsProvincial->whereHas(
'lastEvent',function($QQe) use ($date100BeforeStartdate) {
$QQe->where('date', '<', $date100BeforeStartdate);
}
);
//$recordsProvincial->with('events');
$recordsProvincial = $recordsProvincial->get()->toArray();
$finalMergedResults = $finalMergedResults->merge($recordsProvincial);
//$finalMergedResults = $finalMergedResults->sortByDesc('updated_at');