|
7 | 7 | - [Belirsiz Silme](#soft-deleting)
|
8 | 8 | - [Zaman Damgaları](#timestamps)
|
9 | 9 | - [Sorgu Kapsamları](#query-scopes)
|
| 10 | +- [Küresel Kapsamlar](#global-scopes) |
10 | 11 | - [İlişkiler](#relationships)
|
11 | 12 | - [İlişkilerin Sorgulanması](#querying-relations)
|
12 | 13 | - [Ateşli (Eager) Yüklemeler](#eager-loading)
|
@@ -373,6 +374,70 @@ Parametreyi kapsamın çağrısına geçin:
|
373 | 374 |
|
374 | 375 | $uyeler = Uye::ofType('moderator')->get();
|
375 | 376 |
|
| 377 | +<a name="global-scopes"></a> |
| 378 | +## Küresel Kapsamlar |
| 379 | + |
| 380 | +Bazen, bir model üzerinde yapılan tüm sorgular için uygulanan bir scope tanımlamak isteyebilirsiniz. Aslında, Eloquent'in kendi "belirsiz silme" özelliği bu şekilde çalışmaktadır. Global scope'lar PHP trait'leri ve bir `Illuminate\Database\Eloquent\ScopeInterface` implementasyonu birlikte kullanılarak tanımlanırlar. |
| 381 | + |
| 382 | +İlk olarak, bir trait tanımlayalım. Bu örnek için Laravel'le birlikte gelen `SoftDeletingTrait` kullanacağız: |
| 383 | + |
| 384 | + trait SoftDeletingTrait { |
| 385 | + |
| 386 | + /** |
| 387 | + * Boot the soft deleting trait for a model. |
| 388 | + * |
| 389 | + * @return void |
| 390 | + */ |
| 391 | + public static function bootSoftDeletingTrait() |
| 392 | + { |
| 393 | + static::addGlobalScope(new SoftDeletingScope); |
| 394 | + } |
| 395 | + |
| 396 | + } |
| 397 | + |
| 398 | +Eğer bir Eloquent modeli bir `bootTraitIsmi` isimlendirme kuralına uyan bir metoda sahip olan bir trait kullanırsa, bu Elequent modeli boot edildiği zaman o trait metodu çağrılacaktır. Bu size küresel bir kapsamı kayda geçirme ya da istediğiniz başka bir şey yapma fırsatı vermektedir. Bir scope `ScopeInterface` interface'ini implemente etmelidir, bu interface iki metoda sahiptir: `apply` ve `remove`. |
| 399 | + |
| 400 | +Bunlardan `apply` metodu bir `Illuminate\Database\Eloquent\Builder` sorgu oluşturucu nesnesi alır ve bu kapsama eklemek istediğiniz ilave `where` cümlelerinin eklenmesinden sorumludur. `remove` metodu da bir `Builder` nesnesi alır ve `apply` tarafından gerçekleştirilen eylemlerin geri döndürülmesinden sorumludur. Başka bir deyişle, `remove` metodu eklenmiş olan `where` cümlesini (veya herhangi bir başka cümleyi) çıkarmalıdır. Dolayısıyla, bizim `SoftDeletingScope` için, bu metodlar buna benzer gözükecektir: |
| 401 | + |
| 402 | + /** |
| 403 | + * Verilen bir Eloquent sorgu oluşturucusuna scope uygula. |
| 404 | + * |
| 405 | + * @param \Illuminate\Database\Eloquent\Builder $builder |
| 406 | + * @return void |
| 407 | + */ |
| 408 | + public function apply(Builder $builder) |
| 409 | + { |
| 410 | + $model = $builder->getModel(); |
| 411 | + |
| 412 | + $builder->whereNull($model->getQualifiedDeletedAtColumn()); |
| 413 | + } |
| 414 | + |
| 415 | + /** |
| 416 | + * Verilen Eloquent sorgu oluşturucusundan scope'u kaldır. |
| 417 | + * |
| 418 | + * @param \Illuminate\Database\Eloquent\Builder $builder |
| 419 | + * @return void |
| 420 | + */ |
| 421 | + public function remove(Builder $builder) |
| 422 | + { |
| 423 | + $column = $builder->getModel()->getQualifiedDeletedAtColumn(); |
| 424 | + |
| 425 | + $query = $builder->getQuery(); |
| 426 | + |
| 427 | + foreach ((array) $query->wheres as $key => $where) |
| 428 | + { |
| 429 | + // Eğer where cümlesi bir belirsiz silme date sınırlaması ise, onu sorgudan |
| 430 | + // kaldıracağız ve wheres'deki key'leri resetleyeceğiz. Bu, bu geliştiriciye, |
| 431 | + // tembel yüklenen bir ilişki sonuç kümesinde silinmiş modeli dahil etme imkanı verir. |
| 432 | + if ($this->isSoftDeleteConstraint($where, $column)) |
| 433 | + { |
| 434 | + unset($query->wheres[$key]); |
| 435 | + |
| 436 | + $query->wheres = array_values($query->wheres); |
| 437 | + } |
| 438 | + } |
| 439 | + } |
| 440 | + |
376 | 441 | <a name="relationships"></a>
|
377 | 442 | ## İlişkiler
|
378 | 443 |
|
|
0 commit comments