Proje: Okul Platform · Hub: Okul Platform — Conventions
BaseRepository
App\Repositories\Repos\BaseRepository — Tüm repository’lerin base class’ı.
applyConditions()
QueryCondition[] listesi ile filtre uygula:
$this->applyConditions($query, [
QueryCondition::equal('school_id', $dto->schoolId),
QueryCondition::greaterThan('created_at', $dto->createdAtAfter),
QueryCondition::in('status', $dto->statuses),
]);null dönen condition’lar otomatik skip edilir (opsiyonel filtreler için).
applyIncludes()
$this->applyIncludes($query, $dto->includes); // includes=['school', 'user']QueryCondition Helper
App\Repositories\Repos\Helpers\QueryCondition
Desteklenen operatörler:
=, !=, >, <, >=, <=
like, in, notin
withtrashed, onlytrashed
isnull, isnotnull
textmultisearch, arrayisnull, arrayisnotnull
between, fulltextsearch
Factory metodlar:
QueryCondition::equal($column, $value) // null ise null döner
QueryCondition::notEqual($column, $value)
QueryCondition::greaterThan($column, $value)
QueryCondition::likeWithSpaces($column, $value)
QueryCondition::in($column, $values)
// ... diğerleriBackedEnum desteği: Otomatik ->value dönüşümü yapar.
Null safety: $value === null ise null döner, applyConditions bunu skip eder.
Repository DTO
Her repository metodu için FilterXDTO veya IndexXDTO kullanılır.
DTO’larda pageLength, page, orderField, orderDirection, includes standart alanlar.
SimplePaginatorDTO
Basit pagination için. pageLength + from (offset) kullanır.
@deprecated — Yeni kodda LengthAwarePaginator tercih edilmeli.
Repository Naming
listForAdmin(dto)— Admin filtrelemeli listelistForCustomer(dto)— Customer filtrelemeli listefind(id)— Tekil kayıtcreate(dto)— Oluşturupdate(model, dto)— Güncelledelete(model)— Sil
Related
- api-code-conventions — DI binding, interface kullanımı
- api-controller-service-pattern — Repository’nin çağrıldığı katman