-
Notifications
You must be signed in to change notification settings - Fork 66
Özel Filtre Oluşturma
İ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(),
.
.
]);
}
}
?>