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


How do I add a custom field to a model in Laravel?

我对Laravel和php框架很陌生,如果我错过了一些基本的东西,很抱歉。我在应用程序中创建了一个名为Journey的新模型,它扩展了标准的Eloquent模型。我注意到,我在两个不同的控制器中使用Journey模型,因此我复制了一些代码

从本质上讲,我所做的是获取旅程的标题,并使用自定义类对其进行格式化以清除标题(转换为小写、添加连字符、删除空白等),这样我就可以将其附加到页面URL中。

在一个控制器中,我呼叫:

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

我该怎么做?

您可以为此使用访问器。

Journey型号中添加以下功能:

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

现在您将能够使用:

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