2016-05-26 13 views
1

Oglasというモデルを使用して、テーブルに行を作成しています。その行のためにユニークなスラッグを作成しますが、その行を更新するたびに新しいスラグが生成されます。誰かが投稿を共有して編集したとき、その共有投稿はもはや存在しません。これは、スラッグが変更されたためです。更新時にスラッグを変更しないでください(Laravelモデルで)

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; 
     } 



} 

は要約する:ここで

はコードOglasある新しいポストの火にそのスラグの作成を作成すると発生しません(編集)を更新する際に、スラグを変更しないでください。

+0

何モデルを作成し、更新するあなたのアプローチは。あなたのコントローラのコードを意味します。私たちを見せてもらえますか? – huuuk

答えて

1

雄弁なモデルeventsのように見えますが、投稿の作成時にスラッグを作成する場合は、creatingイベントを使用することができます。

あなたOglas.phpでそれを定義します。

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

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

それとも、あなたAppServiceProvider.phpでそれを定義することができます。

public function boot() 
{ 
    .... 

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

laravelのcreateメソッドを使用すると、この方法で更新されません。または雄弁なクエリを使用して作成します。これにより、一意の行の更新も保護されます。

+0

これはモデルです。だから私は創造を使用し、この火災。私は更新を使用して、これは発生する –

+0

作成する前にvalidateメソッドを使用して、一意colomnのルールを定義します。入力値を検証します。 –

関連する問題