2016-05-26 6 views
1

Ich habe ein Modell namens Oglas mit dem ich Zeilen in der Tabelle erstellen. Es erzeugt einen eindeutigen Slug für diese Reihe, aber wenn ich diese Reihe aktualisiere, erzeugt es einen neuen Slug. Wenn also jemand einen Beitrag teilt und dann bearbeitet, existiert dieser freigegebene Beitrag nicht mehr, weil der Slug geändert wurde.Slug on Update nicht ändern (In Laravel Model)

Hier Code Oglas:

class Oglas extends Model 
    { 
     protected $table = "oglasi"; 
     protected $guarded = ['id']; 

     public function uniqueSlug($title) { 
      $slug = str_slug($title); 
      $exists = Oglas::where('slug', $slug)->count(); 

      if($exists > 0) 
       $slug .= "-" . rand(11111, 99999); 

      return $slug; 
     } 

     public function setNazivAttribute($value) // In table i have "naziv" column 
     { 
      $this->attributes['slug'] = $this->uniqueSlug($value); // I do not want this to fire if post is edited. 
      $this->attributes['naziv'] = $value; 
     } 



} 

Fassen wir zusammen: Wenn neue daß der Körper Schaffung Post Feuer erzeugt, bei der Aktualisierung (Bearbeitung) nicht ausgelöst, nicht Slug ändern.

+0

was Ihr Ansatz Modell zu erstellen und zu aktualisieren. Ich meine den Code Ihres Controllers. Kannst du uns zeigen? – huuuk

Antwort

1

Sieht aus wie eloquent Modell events ist ein guter Weg, um Ihr Problem zu lösen, Wenn Sie die Slug on Post-Erstellung nur erstellen möchten, können Sie creating Ereignis verwenden.

definieren Sie es auf Ihrem Oglas.php:

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

    static::creating(function ($oglas) { 
     $oglas->slug = $this->uniqueSlug($this->naziv); 
    }); 
} 

Oder Sie können es auf Sie definieren AppServiceProvider.php:

public function boot() 
{ 
    .... 

    Oglas::creating(function ($oglas) { 
     $oglas->slug = $oglas->uniqueSlug($oglass->naziv); 
    }); 
} 
0

Verwenden Sie die create-Methode von laravel, damit das Update nicht ausgelöst wird. Oder verwenden Sie eloquente Abfrage zum Erstellen. Dies schützt auch das Update der eindeutigen Zeile.

+0

Dies ist in Modell. Also habe ich create und das feuert. Ich benutzte update und dies feuert –

+0

Verwenden Sie die validate-Methode vor dem Erstellen, in dem Regeln für eindeutige colomn definieren. Und validiere deine Eingabewerte. –