2014-10-05 141 views
0

我對Laravel和PHP框架非常陌生,所以很抱歉如果我錯過任何基本的東西。我在我的應用程序中創建了一個名爲Journey的新模型,該模型擴展了標準Eloquent模型。我注意到,我在兩個不同的控制器中使用我的Journey模型,並且因爲它而複製了一些代碼。如何將自定義字段添加到Laravel的模型中?

本質上,我正在做的是我採取了旅程的標題,我正在用一個自定義類來格式化它以清除標題(轉換爲小寫字母,添加連字符,刪除空格等),所以我可以附加到我的網頁網址。

在一個控制器,我打電話:

$journey = Journey::find($id); 
$journey->cleanURL = Url::clean($journey['name']); // This creates a new element/property with a clean string 

而在另一方面,我打電話:

$journeys = Journey::all(); 
foreach ($journeys as $journey) { 
    $journey->cleanURL = URL::clean($journey['name']); 
} 

這是不恰當的固定字段添加到我的數據庫清理的URL,因爲我可以隨時更改標題(清理的URL所基於的),我希望URL在此事件中自動更新。然而,說這個,我通過兩次呼叫Url::clean重複自己。

我想要做的是編寫一個方法或改變一個現有的方法,以便當我撥打Journey::all()Journey::find()或任何基於查詢的方法時,URL字段已經存在並被填充。我試過了一些Vendor/Eloquent文件,但他們只是讓我感到困惑。

我該怎麼做呢?

回答

2

您可以使用accessor

添加到您的Journey模型如下功能:

public function getCleanUrlAttribute($value) 
{ 
    return Url::clean($this->name); 
} 

現在,您將能夠使用:

$journey = Journey::find($id); 
echo $journey->clean_url; 
+0

優秀。感謝您的示例和文檔鏈接。我沒有意識到訪問者是一件事。 – ReactingToAngularVues 2014-10-05 09:53:58

相關問題