Sobes.tech
Middle

Laravelda bog'lanish turlarini qanday amalga oshirish mumkin?

sobes.tech AI

AIdan javob

Laravelda modellər arasında əlaqə növləri müvafiq modellərdə müəyyən edilmiş metodlar vasitəsilə həyata keçirilir. Bu metodlar əlaqə növünü təsvir edən xüsusi siniflərin obyektlərini qaytarır.

Ən əsas əlaqə növləri və onların metodları:

  1. Bir-bir (One-to-One)

    • hasOne(): Əlaqəni "sahib" olan modeldə istifadə olunur (məsələn, User-in Phone).
    • belongsTo(): Digər modelə "məxsus" olan modeldə istifadə olunur (məsələn, Phone User-ə məxsusdur).
  2. Bir çox (One-to-Many)

    • hasMany(): Bir çox əlaqəli modelə sahib ola bilən modeldə istifadə olunur (məsələn, User çoxlu Post-a malikdir).
    • belongsTo(): Bir çox əlaqəli modelə məxsus olan modeldə istifadə olunur (əks istiqamətdə, məsələn, Post User-ə məxsusdur).
  3. Çox-çox (Many-to-Many)

    • belongsToMany(): Hər iki tərəfdə əlaqə üçün, vasitə cədvəli vasitəsilə istifadə olunur (məsələn, Post çoxlu Tag-a malikdir və Tag çoxlu Post-a malikdir, post_tag cədvəli vasitəsilə).
  4. Bir-bir (polimorfik) (One-to-One Polymorphic)

    • morphOne(): Müxtəlif növ əlaqəli modellərə aid ola bilən modeldə istifadə olunur (məsələn, Post və ya User-in Image-i).
    • morphTo(): Polimorfik əlaqəli modeldə (Image) istifadə olunur və onun hansı modelə aid olduğunu müəyyən edir (Post və ya User).
  5. Bir çox (polimorfik) (One-to-Many Polymorphic)

    • morphMany(): Müxtəlif növ əlaqəli modellərə çox sayda modelə sahib ola bilən modeldə istifadə olunur (məsələn, Post və ya Comment çoxlu Image-ə malikdir).
    • morphTo(): Polimorfik əlaqəli modeldə (Image) istifadə olunur və onun hansı modelə aid olduğunu müəyyən edir (Post və ya Comment).
  6. Çox-çox (polimorfik) (Many-to-Many Polymorphic)

    • morphToMany(): Hər iki tərəfdə, polimorfik vasitə cədvəli vasitəsilə istifadə olunur (məsələn, Post və ya Video çoxlu Tag-a malik ola bilər, taggables cədvəli vasitəsilə).
    • morphedByMany(): Əlaqəli modeldə (Tag) istifadə olunur və onun hansı model növlərinə qoşula biləcəyini müəyyən edir (Post və ya Video).

hasManybelongsTo nümunəsi:

<?php

// app/Models/User.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;

class User extends Model
{
    /**
     * İstifadəçinin postlarını əldə et.
     */
    public function posts(): HasMany
    {
        return $this->hasMany(Post::class);
    }
}
<?php

// app/Models/Post.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Post extends Model
{
    /**
     * Post-a sahib olan istifadəçini əldə et.
     */
    public function user(): BelongsTo
    {
        return $this->belongsTo(User::class);
    }
}

Laravel avtomatik olaraq modellərin adlarına əsasən xarici açarların və əlaqəli cədvəllərin adlarını təxmin edir. Bu təxminləri, əlaqə metodlarına əlavə arqumentlər ötürməklə dəyişdirmək mümkündür. Məsələn, hasMany(Post::class, 'author_id') ifadəsi, posts cədvəlində xarici açarın author_id olduğunu göstərir.