/** * Query builder scope to search on text for complex Bootstrap Tables API * * @param Illuminate\Database\Query\Builder $query Query builder instance * @param text $search Search term * * @return Illuminate\Database\Query\Builder Modified query builder */ public function scopeTextSearch($query, $search) { $search = explode(' OR ', $search); return $query->where(function ($query) use($search) { foreach ($search as $search) { $query->whereHas('model', function ($query) use($search) { $query->whereHas('category', function ($query) use($search) { $query->where(function ($query) use($search) { $query->where('categories.name', 'LIKE', '%' . $search . '%')->orWhere('models.name', 'LIKE', '%' . $search . '%')->orWhere('models.modelno', 'LIKE', '%' . $search . '%'); }); }); })->orWhereHas('model', function ($query) use($search) { $query->whereHas('manufacturer', function ($query) use($search) { $query->where(function ($query) use($search) { $query->where('manufacturers.name', 'LIKE', '%' . $search . '%'); }); }); })->orWhere(function ($query) use($search) { $query->whereHas('assetstatus', function ($query) use($search) { $query->where('status_labels.name', 'LIKE', '%' . $search . '%'); }); })->orWhere(function ($query) use($search) { $query->whereHas('company', function ($query) use($search) { $query->where('companies.name', 'LIKE', '%' . $search . '%'); }); })->orWhere(function ($query) use($search) { $query->whereHas('defaultLoc', function ($query) use($search) { $query->where('locations.name', 'LIKE', '%' . $search . '%'); }); })->orWhere(function ($query) use($search) { $query->whereHas('assigneduser', function ($query) use($search) { $query->where(function ($query) use($search) { $query->where('users.first_name', 'LIKE', '%' . $search . '%')->orWhere('users.last_name', 'LIKE', '%' . $search . '%')->orWhere(function ($query) use($search) { $query->whereHas('userloc', function ($query) use($search) { $query->where('locations.name', 'LIKE', '%' . $search . '%'); }); }); }); }); })->orWhere('assets.name', 'LIKE', '%' . $search . '%')->orWhere('assets.asset_tag', 'LIKE', '%' . $search . '%')->orWhere('assets.serial', 'LIKE', '%' . $search . '%')->orWhere('assets.order_number', 'LIKE', '%' . $search . '%')->orWhere('assets.notes', 'LIKE', '%' . $search . '%'); } foreach (CustomField::all() as $field) { $query->orWhere($field->db_column_name(), 'LIKE', "%{$search}%"); } }); }