深圳国信安php,【PHP 干货】5 个 Laravel Eloquent 小技巧

原文出处: terryharvey

译文出处:就爱PHP

链接:http://9iphp.com/web/laravel/5-laravel-eloquent-tips-tricks.html

在大型的项目中使用 Laravel Eloquent ORM,某些工作可能会变得重复和繁琐,所以本文为大家总结了 5 个很少人知道的小技巧,在开发过程中帮我节省了很多时间。下面就让我们开始吧。

1

快速生成 Model & Migration

这并不是一个很多人知道的小技巧,在 Laravel 文档中也没有提到。下面我们以一个博客为简单的例子,为文章生成 Model 和 Migration。

e53c71b5555962f4ff2d3170cf22e55d.png

大部分人可能会按上面这样做,其实这两条命令可以合并为下面这一条:

30e98b19fe47bb02a12dcd68c4bff1e1.png

2

Eloquent 查询 Scopes

还是以前面的博客应用为例,假设我们的文章表有一个 is_published 字段,其值为 0 或 1 (表示 False 或 True )。在博客列表,我们希望用户只能看到已经发布(published)的文章,使用 Eloquent 我们如何过滤掉未发布的文章呢?答案很明显,需要在查询语句中使用where 条件:

3fd2539599debacc0fb436fdf2d88a7b.png

这当然可以,但如果我们想在其他地方重复使用这个代码段呢?这么重复复制当然也可以实现,但为了符合 DRY 原则( Don’t repeat yourself ),我们可以使用 Eloquent 的查询 Scope。在 Post 模型中创建 ascopePublished 方法:

ac2e3e47f62a855aa4ebcdd6d4f14b49.png

要获取已发布文章,我们只需简单的调用如下命令:

1f326b7567ddd160885eb1651f77027b.png

Eloquent 可以自己把它翻译为 scopePublished 方法。Eloquent 模型中任何以 scope 开始是方法都被当做 Eloquent scope。

值得注意的是,Eloquent scope 的返回值必须是一个查询生成器的实例,所以在 scope 中你不能调用 ->get() 或 ->paginate() 。

3

Accessors(访问器)

在很多情况下,你可能需要访问 Eloquent 模型在数据中并不存在,需要经过一定计算的属性,但很抱歉。我们来看一个例子。假设现在有一个 User 表,它包含这样两个字段:forenames 和 surname 。如果你想在视图中显示用户全名的话,你不得不这么做:

6c4faae02b7be2a203d3af17e9a9b33d.png

首先,我们的应用中可能有很多地方需要使用这段代码,一遍又一遍的输入显然很不实际。其次,呃,语法非常的丑陋且显得格格不入。下面我们来看看如何通过访问器(又称属性)使其变得更加整洁一些。我们在 User 模型中创建一个新的方法:

ca3e6b87b664dca3ac957ce5714e9b55.png

同 Eloquent 识别 scope 一样,任何以 get 和 Attribute 包裹起来的方法都会当做 Eloquent accesor(访问器)。现在我们可以试着执行下面的代码段,它得到的结果和前面是相同的:

f4a640fad95fa679399b70e7e1e5f5e0.png

这不仅可以重复使用,而且更容易输入,并且更具有可读性。

4

动态方法名称

……缺乏一个很好的术语。Eloquent 对于一些方法特别的聪明,如 where() 。看看下面的例子:

9af557508832e6602bb066ac0f4dfe30.png

是不是更加的整洁?

5

扩展访问器

我们来扩展一下 #3。有时候,特别是使用 API 时,当我们使用 Eloquent 从数据库获取记录时,需要对返回的结果集中添加一些访问器(或者说属性)。如果没看明白的话,看看下面这个例子。当调用 User::find(1) 的时候,返回的结果看起来可能是下面这样的:

6d6c2906eaebac86319a88675d9bad8e.png

这并没有什么问题,但如果我们想在其中显示前面创建的 name 属性呢?让我们回到模型中添加 $appends 属性:

05c9a043a593696ce68e69d6b1f5a49d.png

如果再次执行前面的代码,name 属性被直接添加到了结果中。

·end·

国信安基地

源自央企    军工品质

微信号:国信安深圳人才基地

喜欢

分享

or

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值