首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

七个必知必会的 Laravel Model 小知识

原文:https://itnext.io/7-things-you-need-to-know-to-get-the-most-out-of-your-laravel-model-4f915acbb47c

由 learnku.com 翻译:https://learnku.com/laravel/t/33145

当我第一次开始在 Laravel 开发时,我感觉在实现模型时有很多事情可以采用更好的方式来完成。在探索 Eloquent 模型类之后,我发现你可以用你的模型做一些有趣的事儿,这会让你感觉更加的轻松。

在这篇文章中,我会向你提供 7 个小提示,让每一个使用 Laravel 的人都知道应该如何充分利用你的模型。

1 首先,让我们创建模型开始

当我们通过命令行创建一个模型时,你可以指定在某个文件夹中创建这个模型。你所要做的就是在模型名称前输入你的文件夹的名称。当你的模型没有存储在默认的app文件夹中时,这对你很有帮助。

此时将会在app/Models文件夹中创建一个Product模型,这样可以节省你将模型移动到符合条件的的文件夹的时间。

2 转换属性类型

$casts属性提供了将属性强制转换为某些数据类型的方法。

is_publish属性现在将在你访问的时候强制转换为boolean类型,即使它在你的数据库中存储的是integer。也有很多的方式将属性转换为其他的类型,例如date和datetime。

我经常会看到一个错误的行为,就是在 Blade 模版文件中将date和datetime进行格式化,就像这样:

在某些 Blade 模板文件中,你将会看到在同一个变量上进行多次的格式化。这个问题可以通过$casts属性来更高效的解决。

对于date和datetime的转换属性,你可以指定一下格式:

这将始终会以Y-m-d的格式返回published_at属性,所以你不再需要在 Blade 模板文件中进行任何的格式化了。

3 是否可见

某些属性并不应该被包含在模型的数组或 JSON 表示中,例如密码属性。此时便是$hidden属性登场的时候了。

$hidden属性就像是属性的黑名单。或者,你也可以使用$visible属性来设置属性的白名单。

当在模型中设置了$visible属性时,其他的属性将会自动隐藏。这个方式就像$fillable和$guarded属性一样。

4 访问器

有些时候你想要将多个属性合并为一个属性,或者你仅仅想要格式化属性。此时我们可以使用 Laravel 的访问器。

假设你有一个 User 模型,并且它们具有first_name和last_name属性。如果你想要展示全名的话,你可以这么做:

这是一个非常天真的做法。在 Laravel 中解决这个问题的方法是使用访问器。访问器会使用以下语法在模型中定义一个方法:

一个获取全名的访问会是下面这个样子:

要获取全名的值,你只需要像这样调用访问器即可:

5 修改器

修改器 允许您对值进行操作,并在模型的 *$attributes* 属性上设置操作值。变量具有与访问器相同的语法。

这个 mutator 将对姓氏应用*ucfirst *函数,并将结果存储在*$attributes*属性中。

6 追加值

当模型具有访问器和模型关联时,默认情况下它们不会被添加到模型的数组或 JSON 表示中。为此,你需要将访问器或模型关联添加到模型的$appends属性中。现在让我们继续使用getFullNameAttribute访问器的这个例子:

注意:

添加到 $appends 属性的访问器是以蛇形命名法引用,即便访问器是以驼峰命名法定义的。

让我们假设 User 模型与 Blog 模型存在一对多的关系。

要将 blogs 添加到模型中,你只需要将他们添加到$appends属性中即可:

当然,我们以可以指定添加的属性。例如,如果你仅仅需要 blog 中的id和title添加到模型中。

7 最后润色

当一个模型与与另一个模型存在BelongsTo或BelongsToMany关联模型的关系时,比如说 Comment 属于 Blog,在某些情况下可以有助于在更新子项数据时同时更新父级的时间戳。这个问题可以通过将关系添加到$touches属性中来实现。

当 Comment 模型更新时,同时也会更新 Blog 模型的updated_at属性。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190827A00CHR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券