如何在Laravel中为模型添加自定义字段?

时间:2014-10-05 09:37:27

标签: php activerecord laravel laravel-4 eloquent

我对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文件,但它们让我感到困惑。

我将如何做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以使用accessor

向您的Journey模型添加以下功能:

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

现在您可以使用:

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