【问题标题】:How do I add a custom field to a model in Laravel?如何在 Laravel 的模型中添加自定义字段?
【发布时间】:2014-10-05 09:37:26
【问题描述】:

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

基本上,我正在做的是获取 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 文件,但它们让我感到困惑。

我该怎么做呢?

【问题讨论】:

    标签: php activerecord laravel laravel-4 eloquent


    【解决方案1】:

    您可以为此使用accessor

    将以下函数添加到您的Journey 模型中:

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

    现在你可以使用了:

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

    【讨论】:

    • 优秀。感谢您提供示例和文档链接。我没有意识到访问器是一个东西。
    猜你喜欢
    • 2016-12-22
    • 2019-01-28
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2020-10-19
    相关资源
    最近更新 更多