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ı:
-
Bir-bir (One-to-One)
hasOne(): Əlaqəni "sahib" olan modeldə istifadə olunur (məsələn,User-inPhone).belongsTo(): Digər modelə "məxsus" olan modeldə istifadə olunur (məsələn,PhoneUser-ə məxsusdur).
-
Bir çox (One-to-Many)
hasMany(): Bir çox əlaqəli modelə sahib ola bilən modeldə istifadə olunur (məsələn,UserçoxluPost-a malikdir).belongsTo(): Bir çox əlaqəli modelə məxsus olan modeldə istifadə olunur (əks istiqamətdə, məsələn,PostUser-ə məxsusdur).
-
Ç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çoxluTag-a malikdir vəTagçoxluPost-a malikdir,post_tagcədvəli vasitəsilə).
-
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,Postvə yaUser-inImage-i).morphTo(): Polimorfik əlaqəli modeldə (Image) istifadə olunur və onun hansı modelə aid olduğunu müəyyən edir (Postvə yaUser).
-
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,Postvə yaCommentçoxluImage-ə malikdir).morphTo(): Polimorfik əlaqəli modeldə (Image) istifadə olunur və onun hansı modelə aid olduğunu müəyyən edir (Postvə yaComment).
-
Ç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,Postvə yaVideoçoxluTag-a malik ola bilər,taggablescə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 (Postvə yaVideo).
hasMany və belongsTo 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.