در حال بارگزاری ...

معرفی پکیج Laravel Relationship Events در لاراول

توسط الهه قنبری
آخرین به روز رسانی جمعه 16 خرداد 1399

 لاراول دارای پکیج‌های زیادی است که توسط توسعه‌ دهندگان، جهت سهولت کار با این فریم ورک ایجاد می‌شوند. در این مقاله از لیداوب به معرفی یکی دیگر از  پکیج‌های لاراول پرداخته

 لاراول دارای پکیج‌های زیادی است که توسط توسعه‌ دهندگان، جهت سهولت کار با این فریم ورک ایجاد می‌شوند. در این مقاله از لیداوب به معرفی یکی دیگر از  پکیج‌های لاراول پرداخته‌ایم.


Laravel Relationship Events یک پکیج در لاراول است که رویدادهای رابطه‌ای مدل بیشتری را اضافه می‌کند. این پکیج ویژگی‌های زیر را داراست که جهت ثبت شنوندگان (listeners) در متد boot () مدل استفاده می‌شوند:

• HasOneEvents
• HasBelongsToEvents
• HasManyEvents
• HasBelongsToManyEvents
• HasMorphOneEvents
• HasMorphToEvents
• HasMorphManyEvents
• HasMorphToManyEvents
• HasMorphedByManyEvents

در این قسمت، از ویژگی‌های که در بالا ذکر شد، مثالی از چند رویداد در یک مدل country آورده شده است که شامل تعدادی از کاربران است که از ویژگی HasManyEvents استفاده می‌کنند.

namespace App\Models;

use App\User;
use Chelout\RelationshipEvents\Concerns\HasManyEvents;
use Illuminate\Database\Eloquent\Model;

class Country extends Model
{
use HasManyEvents;

protected $fillable = [
'name',
];

public function users()
{
return $this->hasMany(User::class);
}

public static function boot()
{
parent::boot();

static::hasManySaving(function ($parent, $related) {
Log::info("Saving user's country {$parent->name}.");
});

static::hasManySaved(function ($parent, $related) {
Log::info("User's country is now set to {$parent->name}.");
});
}
}

حالت عکس ارتباط با این پکیج نیز ممکن است به صورت زیر باشد:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Chelout\RelationshipEvents\Concerns\HasBelongsToEvents;

class User extends Model
{
    use HasBelongsToEvents;

    /**
     * Get the country associated with the user.
     */
    public function country()
    {
        return $this->belongsTo(Country::class);
    }

    protected static function boot()
    {
        parent::boot();

        static::belongsToAssociating(function ($relation, $related, $parent) {
            Log::info("Associating country {$parent->name} with user.");
        });

        static::belongsToAssociated(function ($relation, $related, $parent) {
            Log::info("User has been assosiated with country {$parent->name}.");
        });
    }
}

توسط متد associate() متناوب، می‌توانید دو رویداد belongsToAssociating و belongsToAssociated را صدا بزنید:

$country = App\Models\Country::first();

$user = factory(User::class)->create([
'name' => 'John Smith',
]);

// Assosiate user with country
// This will fire belongsToAssociating and belongsToAssociated events
$user->country()->associate($country);

می‌توانید اطلاعات مربوط به رویدادهای این پکیج را در این لینک به دست آورید. همچنین، می‌توانید این پکیج را در GitHub بررسی کنید.

آشنایی با پکیج‌های دیگر لاراول در لیداوب:

می‌توانید مقالات کاربردی PHP و لاراول را در لیداوب دنبال کنید.

دیدگاه ها

دیدگاه ها : 0


متاسفانه فقط اعضای سایت قادر به ثبت دیدگاه هستند

رایگان

اشتراک گذاری در
سورس خرید و فروش ارزهای دیجیتال
ثبت امتیاز
1.7 (3 رای)

   لطفا صبر کنید ...