2014-10-05 182 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

相关问题