Reputation: 458
I am making laravel project. There is need to merge two complex eloquent queries, not query result. Is there any way to merge two queries?
$query = DeviceReport::query();
$query_setting_null = $query;
$query_not_null = $query;
$query_setting_null->where(function ($q) {
$q->whereNotNull('device_setting_id');
});
if ( $company_id ) {
$query_setting_null->whereHas('deviceSetting', function ($q) use ($company_id) {
$q->where('company_id', $company_id);
});
}
........
$query_not_null->where(function ($q) {
$q->whereNull('device_setting_id');
});
if ( $company_id ) {
$query_not_null->whereHas('deviceAssignment', function ($q) use ($company_id) {
$q->where('company_id', $company_id);
});
}
........
$query = $query_not_null->merge($query_setting_null);
return $query;
My code looks some diry, sorry. The main point is follows:
$query_setting_null->where(function ($q) {
$q->whereNotNull('device_setting_id');
});
.........
$query_not_null->where(function ($q) {
$q->whereNull('device_setting_id');
});
.........
The value of device_setting_id depends after queries;
Upvotes: 0
Views: 276
Reputation: 1012
I don't completely understand what you are trying but merging queries of whereNull
and whereNotNull
is like this:
$query_merged->where(function ($q) {
$q->whereNotNull('device_setting_id');
})->orWhere(function ($q) {
$q->whereNull('device_setting_id');
});
Not sure if this is what you want. Let me know if it helps.
Upvotes: 1