Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

Laravel 8.69'dan itibaren, dizenin bir kısmını "*" gibi tekrarlanan bir karakterle maskeleyen bir "Str::mask()" yöntemi vardır.
Str::mask yöntemi, bir dizenin bir kısmını tekrarlanan bir karakterle maskeler ve e-posta adresleri ve telefon numaraları gibi dizelerin bölümlerini gizlemek için kullanılabilir:

use Illuminate\Support\Str;
 
$string = Str::mask('taylor@example.com', '*', 3);
 
// tay***************

Gerekirse maske yöntemine üçüncü argüman olarak negatif bir sayı sağlarsınız; bu, yönteme dizenin sonundan belirli bir mesafede maskelemeye başlaması talimatını verir:

$string = Str::mask('taylor@example.com', '*', -15, 3);
 
// tay***@example.com

Ayrıca

use Illuminate\Support\Str;
 
$string = Str::of('taylor@example.com')->mask('*', 3);
 
// tay***************
$string = Str::of('taylor@example.com')->mask('*', -15, 3);
 
// tay***@example.com
 
$string = Str::of('taylor@example.com')->mask('*', 4, -4);
 
// tayl**********.com

Şeklinde de yapılabilir. İşlevsellik açısından her iki yöntem de aynı sonucu üretir. Ancak Str::of ile kullanılan mask yöntemi, dizeyi sarmalayarak daha zincirleme bir yapı sunar ve daha fazla Str sınıfı yöntemiyle birleştirilebilir. İhtiyacınıza göre hangi kullanımı tercih ettiğinizi seçebilirsiniz.

  • mgsmus bunu yanıtladı.
  • aghabalaguluzade Teşekkürler ama dokümanda olmayan, bilinmeyen şeylere öncelik verirsek daha faydalı olur. Mesela:

    team_user
    +---------+----------+---------+------------+------------+
    | user_id | group_id | team_id | created_at | updated_at |
    +---------+----------+---------+------------+------------+
    |       1 |        1 |       1 |    2023... |    2023... |
    |       1 |        1 |       2 |    2023... |    2023... |
    |       1 |        2 |       3 |    2023... |    2023... |
    +---------+----------+---------+------------+------------+
    $table->unique(['user_id', 'group_id', 'team_id'']);

    şeklinde bir pivot tablomuz var ve User ile Team ve Group arasında bu tablo aracılığıyla BelongsToMany ilişkisi var:

    app/Models/User.php

    public function groups(): BelongsToMany
    {
        return $this->belongsToMany(Group::class)
            ->withTimestamps();
    }
    
    public function teams(): BelongsToMany
    {
        return $this->belongsToMany(Team::class)
            ->withPivot('group_id')
            ->withTimestamps();
    }

    teams ilişkisi doğru çalışırken groups ilişkisi doğru çalışmıyor. Normalde id'si 1 ve 2 olan iki Group getirmesi gerekirken id'si 1 olan Group'u iki kez getiriyor ve 3 tane Group dönüyor ve kullanıcı kaç grup içinde diye bir sorgu yazdığımızda bize 2 yerine 3 şeklinde yanlış bir cevap veriyor.

    Bu hatanın olmaması için iki şeye dikkat etmemiz lazım:

    1. distinct() yöntemi kullanarak aynı kayıtların gelmesini engellemeliyiz.
    2. withPivot ve withTimestamp kullanarak pivot alanları sorguya eklemememiz gerekiyor çünkü bu alanları sorguya eklediğinizde birden fazla alanı distinct içine dahil ettiği için benzersizliği kırıyoruz. SQL'deki GROUP BY kullanırken SELECT * yapmama sebebimiz ile aynı, şurada anlatmıştım:
      https://laravel.gen.tr/d/7033-etiketi-iceren-postlari-listelerken-hata/5

    Bu durumda doğru sorgu için yapılması gereken:

    public function groups(): BelongsToMany
    {
        return $this->belongsToMany(Group::class)
            ->distinct();
    }

    aghabalaguluzade Teşekkürler ama dokümanda olmayan, bilinmeyen şeylere öncelik verirsek daha faydalı olur. Mesela:

    team_user
    +---------+----------+---------+------------+------------+
    | user_id | group_id | team_id | created_at | updated_at |
    +---------+----------+---------+------------+------------+
    |       1 |        1 |       1 |    2023... |    2023... |
    |       1 |        1 |       2 |    2023... |    2023... |
    |       1 |        2 |       3 |    2023... |    2023... |
    +---------+----------+---------+------------+------------+
    $table->unique(['user_id', 'group_id', 'team_id'']);

    şeklinde bir pivot tablomuz var ve User ile Team ve Group arasında bu tablo aracılığıyla BelongsToMany ilişkisi var:

    app/Models/User.php

    public function groups(): BelongsToMany
    {
        return $this->belongsToMany(Group::class)
            ->withTimestamps();
    }
    
    public function teams(): BelongsToMany
    {
        return $this->belongsToMany(Team::class)
            ->withPivot('group_id')
            ->withTimestamps();
    }

    teams ilişkisi doğru çalışırken groups ilişkisi doğru çalışmıyor. Normalde id'si 1 ve 2 olan iki Group getirmesi gerekirken id'si 1 olan Group'u iki kez getiriyor ve 3 tane Group dönüyor ve kullanıcı kaç grup içinde diye bir sorgu yazdığımızda bize 2 yerine 3 şeklinde yanlış bir cevap veriyor.

    Bu hatanın olmaması için iki şeye dikkat etmemiz lazım:

    1. distinct() yöntemi kullanarak aynı kayıtların gelmesini engellemeliyiz.
    2. withPivot ve withTimestamp kullanarak pivot alanları sorguya eklemememiz gerekiyor çünkü bu alanları sorguya eklediğinizde birden fazla alanı distinct içine dahil ettiği için benzersizliği kırıyoruz. SQL'deki GROUP BY kullanırken SELECT * yapmama sebebimiz ile aynı, şurada anlatmıştım:
      https://laravel.gen.tr/d/7033-etiketi-iceren-postlari-listelerken-hata/5

    Bu durumda doğru sorgu için yapılması gereken:

    public function groups(): BelongsToMany
    {
        return $this->belongsToMany(Group::class)
            ->distinct();
    }