2017-03-03 70 views
0

我嘗試在Laravel(5.4)中使用cviebrock /雄辯可調。我有一個Page模型和一個網站模型。它在頁面模型中使用可滯後的。現在,如果我創建一個頁面,我想在生成一個slu before(例如在標題之後有-1或-2)之前通過列website_id和slug檢查唯一性。它看起來像我應該使用方法「customizeSlugEngine」,但它不會被調用時,我將它添加到Page模型。通過關係id的口頭流暢唯一性測試

當它工作時,我需要通過slu and和頁面ID找到頁面。在我使用的pageController(前端)中:

Page::findBySlug($slug); 

如何通過slug和webiste_id找到頁面?

+0

工作的呢? Page :: where('website_id','=',$ website_id) - > findBySlug($ slug); – dparoli

+0

感謝您的輸入和包中的文檔,我通過以下方式解決此問題:Page :: whereSlug($ slug) - > where('website_id','=',$ website_id) - > first(); – Tom

+0

你很高興,發佈你的問題的答案 – dparoli

回答

0

感謝您的意見和解答。

首先,我在我的問題的第一部分中犯了一個錯誤。我在Laravel做了一個獨特的slu custom的自定義驗證,沒有網站ID。我改變了這一點,它的工作正常。

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

模型需要函數「scopeWithUniqueSlugConstraints」在生成之前檢查多個列。

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

在我的PageController(前端),我打電話與頁面:

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

或者您可以使用str_slug如果你只是想sluggify

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

模型

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

控制器

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

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