Skip to content

Özel Filtre Oluşturma

Selahattin edited this page Sep 30, 2015 · 10 revisions

İsterseniz tablo sütunlarına göre filtreleme yerine özel, karmaşık filtrelerinizi de kullanabilirsiniz.

Unutmayın, bu paket url üzerinden gönderilen parametrelerde (sabit parametreler dışında) öncelikle sizin oluşturduğunuz özel filtrenin varlığını kontrol eder. Eğer özel bir filtre oluşturduysanız onu uygular, özel filtre oluşturmadığınız taktirde tablo sütununda filtreleme yapar.

Örneğin ?city_id=34 sorgusuna direkt olarak tablodaki city_id sütunu değil de özel filtrenizin kullanılmasını isterseniz

şu şekilde yapabilirsiniz:

İlk olarak kullanıcağınız model için bir QueryBuilder sınıfından türeyen bir sınıf oluşturun.

Ardından filtreleme yapmak istediğiniz parametre ismini stadly case olacak şekilde "filterByParameterName" methodu oluşturun.

<?php 
	use Unlu\Laravel\Api\QueryBuilder;

	class UserQueryBuilder extends QueryBuilder
	{
		public function filterByCityId($query, $id)
		{
			return $query->whereHas('city', function($q) use ($id) {
	            return $q->where('id', $id);
	        });
		}
	}
?>

Daha sonra controller içerisinde

QueryBuilder yerine oluşturduğunuz UserQueryBuilder sınıfını kullanın. Bu şekilde yaptığınız taktirde url ile gelen city_id parametresinde oluşturduğunuz özel filtre uygulanır.

controller dosyası:

<?php 
	namespace App\Whatever\Api\Controllers;

	use App\Http\Requests;
	use App\User;
	use Illuminate\Http\Request;

	// Add this line
	use YourNameSpace\Path\UserQueryBuilder;

	class UsersController extends Controller
	{
	  public function index(Request $request)
	  {
	    $queryBuilder = new UserQueryBuilder(new User, $request);
	    
	    return response->json([
	      'data' => $queryBuilder->paginate()->result(),
	      .
	      .
	    ]);
	  }
	}
?>