Laravel İlişki Etkinlikleri

Laravel Relationship Events, Viacheslav Ostrovskiy tarafından ekstra model ilişki etkinlikleri ekleyen bir pakettir. Bu paket, dinleyicileri bir modelin boot() yönteminde kaydetmek için kullanılan aşağıdaki özelliklerle birlikte gelir:

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

Ve yukarıdaki özelliklerin dışında, burada bir birkaç olayların bir örnek Country çok var modeli Users kullanarak HasManyEvents özelliği:

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}.");
});
}
}

Ve bu paketle ilişkinin tersi aşağıdaki gibi görünebilir:

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}.");
});
}
}

Aşırı yüklenmiş bir associate() yöntemini kullanarak, belongsToAssociating ve belongsToAssociated iki olayı 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);

Daha fazla bilgi edin

Paket, her bir özellik ve ilişkilendirme türü için belgelere sahiptir. Chelout / laravel-relationship-events adresinde GitHub'daki pakete göz atın.

Bir önceki yazımız olan Temmuz ayında gerçekleşecek Laravel Etkinlikleri ve Buluşmaları başlıklı makalemizi de okumanızı öneririz.

About This Author

Comments are closed

%d blogcu bunu beğendi: