2017-03-03 2 views
0

Ich versuche cviebrock/eloquent-träge in Laravel (5.4) zu verwenden. Ich habe ein Page-Modell und ein Website-Modell. Es verwendet im Seitenmodell die Option "träge". Nun, wenn ich eine Seite erstelle, möchte ich die Einzigartigkeit durch die Spalten website_id und slug überprüfen, bevor ich einen Slug erzeuge (mit -1 oder -2 nach dem Titel zum Beispiel). Es sieht so aus, als müsste ich die Methode "customizeSlugEngine" verwenden, aber sie wird nicht aufgerufen, wenn ich sie dem Page-Modell hinzufüge.eloquent-träge Eindeutigkeitstest durch Beziehungs-ID

Wenn es funktioniert, muss ich Seite nach Slug und Seite ID finden. In meinem Pagecontroller (Front-End) i verwenden:

Page::findBySlug($slug); 

Wie ich Seiten von Slug und webiste_id finden kann?

+0

funktionierts? Seite :: where ('website_id', '=', $ website_id) -> findBySlug ($ slug); – dparoli

+0

Danke, mit deiner Eingabe und der Dokumentation aus dem Paket löse ich das mit: Page :: whereSlug ($ slug) -> wo ('website_id', '=', $ website_id) -> first(); – Tom

+0

Schön, dass du es hast, poste die Antwort auf deine Frage – dparoli

Antwort

0

Danke für die Kommentare und Antworten.

Zuerst machte ich einen Fehler im ersten Teil meiner Frage. Ich habe eine benutzerdefinierte Validierung in Laravel auf einer einzigartigen Slug, ohne Website-ID. Ich habe das geändert und es funktioniert gut.

'slug' => 'unique:pages,slug,NULL,pages,website_id,'.\Request::get('website_id'), 

Das Modell muss die Funktion „scopeWithUniqueSlugConstraints“ für mehrere Spalten zu überprüfen, bevor zu erzeugen.

public function website() 
{ 
    return $this->belongsTo('App\Models\Website'); 
} 

public function scopeWithUniqueSlugConstraints(Builder $query, Model $model, $attribute, $config, $slug) 
{ 
    $website = $model->website; 
    return $query->where('website_id', $website->getKey()); 
} 

In meinem Pagecontroller (Front-End) nenne ich die Seite mit:

Page::whereSlug($slug)->where('website_id', '=', $website_id)->first(); 
0

Alternativ können Sie str_slug verwenden, wenn Sie nur

$title = str_slug("Laravel 5 Framework", "-"); 
//gives laravel-5-framework 

MODEL

class News 
{ 
    protected $fillable = [ 
     'title', 'body', 'slug', 
    ]; 
} 

CONTROLLER

public function store(Request $request) 
    { 
    $news = new News(); 
    $news->title = $request->input("title"); 
    $news->body = $request->input("body"); 
    $news->slug = str_slug($request->input("title"));//you can append current date and time to make unique slug 

    $news->save(); 

} 

/** 
* Display the specified news by slug. 
* 
* @param $slug 
* @return Response 
*/ 
public function ShowbySlug($slug) 
{ 
    $news = News::where("slug",'=',$slug); 

    return view('news.show', compact('news')); 
} 

ROUTE sluggify wollen

Route::get("news/{slug}","[email protected]"); 
Verwandte Themen