如何将自定义字段添加到Laravel的模型中?
问题描述:
我对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
文件,但他们只是让我感到困惑。
我该怎么做呢?
答
您可以使用accessor。
添加到您的Journey
模型如下功能:
public function getCleanUrlAttribute($value)
{
return Url::clean($this->name);
}
现在,您将能够使用:
$journey = Journey::find($id);
echo $journey->clean_url;
优秀。感谢您的示例和文档链接。我没有意识到访问者是一件事。 – ReactingToAngularVues 2014-10-05 09:53:58