我对Laravel和php框架一般都很新,所以如果我错过任何基本内容,那就很抱歉。我在我的应用程序中创建了一个名为Journey
的新模型,它扩展了标准Eloquent
模型。我注意到的是我在两个不同的控制器中使用我的Journey模型,因为它我正在复制一些代码。
基本上,我正在做的是我正在使用一个旅程的标题,我用自定义类格式化它来清理标题(转换为小写,添加连字符,删除空格等)所以我可以将其附加到我的网页网址。
在一个控制器中,我正在打电话:
$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
文件,但它们让我感到困惑。
我将如何做到这一点?
答案 0 :(得分:2)
您可以使用accessor。
向您的Journey
模型添加以下功能:
public function getCleanUrlAttribute($value)
{
return Url::clean($this->name);
}
现在您可以使用:
$journey = Journey::find($id);
echo $journey->clean_url;