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

Merhaba,

Bir kullanıcının kendine ait alt kullanıcı hesabı oluşturması için kabaca nasıl bir database dizayn ve model hazırlanması gerekiyor.

users tablosuna örneğin bir adet alan ekleyip "subuser_id" tarzında eğer ana kullanıcı ise 0 değilse oluşturan kullanıcının id adresini mi ekletip oradan işlemler yaptırılacak ve o zaman UserModel içerisinde ona bağlı kullanıcıları nasıl alacağız.

function subUsers() deyip one to many ilişki ile mi bağlayacağız. Yani aslında sormak istediğim bu işin en mantıklı ve profesyonel hali ile yapmak. Örnek var mı veya siz nasıl önerirsiniz?

Veya sub_users adlı ayrı bir tablo ve model oluşturup onunla mı ilişkilendireceğiz.

Bu arada ufak bir detay onlara laravel permission ile yetki vermek zorundayım.

Teşekkürler.

  • mgsmus bunu yanıtladı.
  • gundogduyakici users tablosuna parent_id gibi bir alan eklerseniz adjacency list olayına girmiş olursunuz, yani hiyerarşik veri. Bunu forumda aratabilirsiniz.

    Benim şöyle bir önerim var: Takım;

    Kullanıcıları kesinlike ayrı bir tabloda tutmayacaksınız. Bunu forumda anlattım. Tutarsanız sorumluluğunu da üstünüze almanız gerekecek. En kolay yol her zaman users tablosunda tutmak.

    Takım oluşturacaksınız. Bu takımların yöneticileri ve üyeleri olacak. Tek pivot tablo ile de yapılabilir ama karışır; basit olması için iki pivot daha iyi. Bu durumda 4 tablo olmuş oluyor:

    users
    teams
    admin_team
    member_team

    Kullanıcı bir takıma üye de olabilir o takımda yönetici de olabilir. Bir üye birden fazla takımda da yer alabilir bir takımın birden fazla yöneticisi de olabilir.

    User BelongsToMany Team managedTeams() Bu, kullanıcının yönettiği takımlar. Bu takımın altındaki üyeler bu kullanıcının alt kullanıcıları olmuş oluyor. admin_team pivot tablosunu kullanacak.

    User BelongsToMany Team teams() Bu, kullanıcının üyesi olduğu takımlar. Bu takımdaki diğer üyeler bu kullanıcının takım arkadaşı olmuş oluyor. member_team pivot tablosunu kullanacak.

    Team BelongsToMany User admins() Bu, takımın yöneticileri. Bir üye mesela kendi ait olduğu bir takımdan yola çıkıp admin ilişkisine bakarsa yöneticilerini yani üst kullanıcıları bulmuş olacak. admin_team pivot tablosunu kullanacak.

    Team BelongsToMany User members() Bu, takımdaki üyeler. member_team pivot tablosunu kullanacak.

    // A Takımı üyeleri
    $hannibal = User::find(1);
    $murdock = User::find(2);
    $baracus = User::find(3);
    $faceman = User::find(4);
    
    // A Takımı
    $theATeam = Team::find(1);
    
    // Hannibal A takımını yönetir
    $hannibal->managedTeams()
        ->attach($theATeam);
    
    // Ayrıca o da takımın bir üyesidir.
    $theATeam->members()
        ->attach($hannibal);
    
    // Diğer üyeler
    $theATeam->members()
        ->attach([
            $murdock,
            $baracus,
            $faceman,
        ]);
    $theATeam = Team::find(1);
    
    $admins = $theATeam->admins; // ['hannibal']
    
    $members = $theATeam->members; // ['hannibal', 'murdock', 'baracus', 'faceman']

    Bunun güzel tarafı takımlara da ayrı yetki verebilirsiniz.

    gundogduyakici users tablosuna parent_id gibi bir alan eklerseniz adjacency list olayına girmiş olursunuz, yani hiyerarşik veri. Bunu forumda aratabilirsiniz.

    Benim şöyle bir önerim var: Takım;

    Kullanıcıları kesinlike ayrı bir tabloda tutmayacaksınız. Bunu forumda anlattım. Tutarsanız sorumluluğunu da üstünüze almanız gerekecek. En kolay yol her zaman users tablosunda tutmak.

    Takım oluşturacaksınız. Bu takımların yöneticileri ve üyeleri olacak. Tek pivot tablo ile de yapılabilir ama karışır; basit olması için iki pivot daha iyi. Bu durumda 4 tablo olmuş oluyor:

    users
    teams
    admin_team
    member_team

    Kullanıcı bir takıma üye de olabilir o takımda yönetici de olabilir. Bir üye birden fazla takımda da yer alabilir bir takımın birden fazla yöneticisi de olabilir.

    User BelongsToMany Team managedTeams() Bu, kullanıcının yönettiği takımlar. Bu takımın altındaki üyeler bu kullanıcının alt kullanıcıları olmuş oluyor. admin_team pivot tablosunu kullanacak.

    User BelongsToMany Team teams() Bu, kullanıcının üyesi olduğu takımlar. Bu takımdaki diğer üyeler bu kullanıcının takım arkadaşı olmuş oluyor. member_team pivot tablosunu kullanacak.

    Team BelongsToMany User admins() Bu, takımın yöneticileri. Bir üye mesela kendi ait olduğu bir takımdan yola çıkıp admin ilişkisine bakarsa yöneticilerini yani üst kullanıcıları bulmuş olacak. admin_team pivot tablosunu kullanacak.

    Team BelongsToMany User members() Bu, takımdaki üyeler. member_team pivot tablosunu kullanacak.

    // A Takımı üyeleri
    $hannibal = User::find(1);
    $murdock = User::find(2);
    $baracus = User::find(3);
    $faceman = User::find(4);
    
    // A Takımı
    $theATeam = Team::find(1);
    
    // Hannibal A takımını yönetir
    $hannibal->managedTeams()
        ->attach($theATeam);
    
    // Ayrıca o da takımın bir üyesidir.
    $theATeam->members()
        ->attach($hannibal);
    
    // Diğer üyeler
    $theATeam->members()
        ->attach([
            $murdock,
            $baracus,
            $faceman,
        ]);
    $theATeam = Team::find(1);
    
    $admins = $theATeam->admins; // ['hannibal']
    
    $members = $theATeam->members; // ['hannibal', 'murdock', 'baracus', 'faceman']

    Bunun güzel tarafı takımlara da ayrı yetki verebilirsiniz.