Laravel.io

$products = Product::available()->orderBy($sort_filed, $sort_type);;
foreach($filter as $attribute => $options) {
                                        $products->join('product_attributes as pa' . $attribute, function ($join) use ($attribute) {
						$join->on('pa' . $attribute . '.product_id', '=', 'products.id');
					});
					$i = 0;
					foreach($options as $option) {
						//$products->where(function ($products) use ($attribute, $option, $i) {
							if ($i == 0) {
								$products->where(function ($query) use ($attribute, $option) {
									$query->where('pa' . $attribute . '.attribute_id', '=', $attribute);
									$query->where('pa' . $attribute . '.attribute_option_id23', '=', $option);
								});
								$i++;
							} else {
								$products->orWhere(function ($query) use ($attribute, $option) {
									$query->where('pa' . $attribute . '.attribute_id', '=', $attribute);
									$query->where('pa' . $attribute . '.attribute_option_id2', '=', $option);
								});
							};
						//});
					};
				};

Please note that all pasted data is publicly available.