返回顶部
首页 > 资讯 > 精选 >Laravel Eloquent使用技巧有哪些
  • 581
分享到

Laravel Eloquent使用技巧有哪些

2023-07-04 14:07:07 581人浏览 独家记忆
摘要

这篇“Laravel Eloquent使用技巧有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Laravel Eloqu

这篇“Laravel Eloquent使用技巧有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Laravel Eloquent使用技巧有哪些”文章吧。

蛇形命名 属性

蛇形命名属性是一个有趣的属性。让我们看看代码是怎么说的:

public static $snakeAttributes = true;

人们经常会错误地使用这个属性来更改访问属性的方式。许多人认为,如果更改这个属性,就可以使用驼峰式注释轻松访问属性。事实并非如此。我们强烈建议你不要使用它。当模型作为数组输出时,只需定义属性是驼峰式还是蛇形即可。

如果你想基于驼峰式命名,我们建议你查看 Kirk Bushell 的软件包 Eloquence by Kirk Bushell.

分页

如果你正在使用 Laravel 的 Eloquent ORM,那这对你是个好消息。 它提供了一种开箱即用的分页方法。你可能很熟悉这样的写法:

$comments = Comment::paginate(20);

使用此方法,你可以每页20个条目来为 comment model 分页。更改该值可以定义每页显示多少条数。如果不指定任何内容,则应用默认值,即15。

假设您希望在网站上的多个位置显示评论。每页总是有30条评论。如果必须在每个地方传递参数30,那就麻烦了。因此,您可以直接在模型上设置新的默认值。

protected $perPage = 30;

在model里面增加自定义值

Eloquent有一个称为“访问器”的强大功能。该功能允许你向模型或表中不存在的模型添加自定义字段。使用现有的值或定义全新的值都不重要,随时都可以回退。下面是访问器如何工作的示例。假设有一个名为user的模型,我们给他添加一个FullName的访问器:

function getFullNameAttribute() {    return sprintf('%s %s', $this->first_name, $this->last_name);}

现在你可以访问post模型上的full_name属性,如下:

User::latest()->first()->full_name;

如果返回对象(如集合),则此属性不会附加到用户模型。将protected$appends属性添加到模型中。它接受一个数组,其中包含一个或多个字段,从现在起应该自动追加这些字段。写成这样就可以了:

protected $appends = ['full_name'];

为不存在列增加一个变异器(属性设置器)

变异器与获取器相反。你可以用它做些很有意思的事情。 举个例子,转换不同类型的输入。 让我来给你详细说说。假设你想要保存一种类型的时间段。通常,你总是保存尽可能小的单位。在我们的案例中是秒。由于UX的原因,用户不想输入秒,例如在一个地方输入分钟,或者在另一个地方输入小时。这一切都可以很快解决。

class Video extends Model{    public function setDurationInMinutes($value)    {        $this->attributes['duration_in_seconds'] = $value * 60;    }    public function setDurationInHours($value)    {        $this->attributes['duration_in_seconds'] = $value * 60 * 60;    }}

上述代码意味着你可以使用一个不存在于数据表本身的字段。
model中使用的是duration_in_minutes字段,但是在后台,我们使用duration_in_seconds进行更新,也有可能使用一个不存在字段duration_in_hours。根据这个逻辑,我们在Controller如此调用:

class AnyController{    public function store()    {        $video->update([            'title' => request('title'),            'duration_in_minutes' => request('duration_in_minutes'),        ]);    }}

这将节省你在控制器中进行计算的时间,你可以简单地使用不存在的列,并在执行某些计算时使用变异器将其结果映射到正确的字段上。

渴求式加载: with $with

让我们来谈谈关联关系。默认情况下,Laravel使用延迟加载。就关联关系而言,这意味着什么?延迟加载的好处是可以节省内存,因为并不是所有的数据都需要保留,我们可以在需要的时候加载数据。如下:

$comments = Comment::all();foreach ($comments as $comment) {    echo $comment->user->name;}

在上面的例子中,我们会获取所有评论数据。然后遍历评论并显示每个评论的用户名。这段代码没什么问题,可以正常工作,但我们遇到了一个问题。延迟加载现在确保仅当我们想要输出用户名时才执行获取用户的查询。

欢迎来到你的第一个 N+1 问题。为什么是 N+1?N 始终是评论的数量,1 是获取评论的查询。例如,如果我们有500个评论,那么获取所有评论的查询被触发一次,然后一个查询获得相应的user-per评论。所以500+1查询。这意味着随着注释数量的增加,查询的数量也会增加。

为了防止出现这种情况,有一种称为渴求式加载的方法。

$comments = Comment::with('user')->get();foreach ($comments as $comment) {    echo $comment->user->name;}

这会以两个查询结束。第一个查询获取所有注释,第二个查询立即获取所有关联用户。在后台,会发生以下情况(简化版sql):

SELECT id, user_id, body FROM comments;SELECT name FROM users WHERE user_id IN (1,2,3,4,5...);

不论是 10、500 还是 10000 条评论数据都不重要,我们都依旧只执行两次SQL查询。

好了,你现在已经看到如何使用渴求式加载了。但只限于如何手动使用。你还可以将整个过程自动化,以便某些关联关系总是自动通过渴求式方式加载。为此,需要给模型设定一个属性。

protected $with = [];

我们可以在Comment model简单设置 protected $with = ['user'];, 从现在起,user在任何时候都会自动加载。

我们还有很多种渴求式加载,有仅加载特定列、嵌套即时加载、多个即时加载等等。更多详情请Laravel文档或深入核心。

modelkeys 方法

有的时候需要查询所有的主键 ID, 查询是否复杂并不重要,大多数人可能会像这样做:

User::all()->pluck('id');

这个操作很 nice,但是返回的是一个集合,想要转换成数组的话可以使用 toArray()

User::all()->pluck('id')->toArray();

大多数情况下,上面的操作的可以简化成这样:

User::all()->modelKeys();

这种方式返回一个数组。重要的是这个方法并不会总是返回 id。 顾名思义,他是以数组的形式返回所有模型主键。主键默认是id,同时也可以在模型中定义主键名。

protected $primaryKey = 'id';

以上就是关于“Laravel Eloquent使用技巧有哪些”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: Laravel Eloquent使用技巧有哪些

本文链接: https://lsjlt.com/news/345855.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Laravel Eloquent使用技巧有哪些
    这篇“Laravel Eloquent使用技巧有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Laravel Eloqu...
    99+
    2023-07-04
  • Laravel使用技巧有哪些
    今天小编给大家分享一下Laravel使用技巧有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.胖模型,瘦控制器如果我们...
    99+
    2023-07-04
  • Laravel Eloquent的特性有哪些
    这篇文章给大家分享的是有关Laravel Eloquent的特性有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。九个有用的 Laravel Eloquent 的特性对于使用 Laravel 的开发者来说,可能...
    99+
    2023-06-14
  • Laravel HTTP Client技巧有哪些
    本文小编为大家详细介绍“Laravel HTTP Client技巧有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Laravel HTTP Client技巧有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-07-05
  • Laravel模型时间戳使用小技巧有哪些
    这篇文章主要介绍Laravel模型时间戳使用小技巧有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!默认情况下,Laravel Eloquent 模型默认数据表有 created_at 和 updated_at 两...
    99+
    2023-06-22
  • Excel使用技巧有哪些
    这篇文章给大家分享的是有关Excel使用技巧有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.一键设置下拉菜单下拉菜单用得好的话,效率秒提升!那么怎么设置下拉菜单呢?先选中...
    99+
    2024-04-02
  • 使用JavaScript技巧有哪些
    小编给大家分享一下使用JavaScript技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JS-Tips控制台提示代码执...
    99+
    2024-04-02
  • Vue使用技巧有哪些
    小编给大家分享一下Vue使用技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!数据不响应,可能是用法有问题前几天有朋友给我...
    99+
    2024-04-02
  • Css3使用技巧有哪些
    这篇文章主要为大家展示了“Css3使用技巧有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Css3使用技巧有哪些”这篇文章吧。 经典的css3实例...
    99+
    2024-04-02
  • Bash使用技巧有哪些
    本篇内容主要讲解“Bash使用技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Bash使用技巧有哪些”吧!要是你整天使用计算机,如果能找到需要重复执行的命令并记下它们以便以后轻松使用那就...
    99+
    2023-06-05
  • vim使用技巧有哪些
    这篇文章将为大家详细讲解有关vim使用技巧有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、VIM常用操作1、插入命令a在光标所在字符后插入A在光标所在行尾插入i在光标所在字符前插入I...
    99+
    2023-06-05
  • CSS有哪些使用技巧
    本篇内容主要讲解“CSS有哪些使用技巧”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CSS有哪些使用技巧”吧! 1. 文字的水平居中 将一段文字置于容器的水平中点,只要设置text-a...
    99+
    2023-06-08
  • 使用Linux技巧有哪些
    小编给大家分享一下使用Linux技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1:检查不是由你运行的程序难度:高级应用程序:bash(译注:UNIX或者...
    99+
    2023-06-16
  • NPM使用技巧有哪些
    小编给大家分享一下NPM使用技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!以下记录一些NPM作为工具的一些使用技巧。npmrc.npmrc 做为npm的...
    99+
    2023-06-17
  • Git有哪些使用技巧
    这篇文章将为大家详细讲解有关Git有哪些使用技巧,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. Git常用命令图Workspace:工作区Index / Stage:暂存区Repository:本地仓...
    99+
    2023-06-17
  • ADO.NET使用技巧有哪些
    本篇内容主要讲解“ADO.NET使用技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ADO.NET使用技巧有哪些”吧!使用OleDbCommand的***实践 不同.NET框架数据提供程...
    99+
    2023-06-17
  • Git使用技巧有哪些
    小编给大家分享一下Git使用技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Git,一个分布式版本控制系统,它已经成为了开源世界的源码控制默认工具,在4月...
    99+
    2023-06-16
  • Linux使用技巧有哪些
    这篇文章主要为大家展示了“Linux使用技巧有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux使用技巧有哪些”这篇文章吧。1.快速跳转命令 - z要是每次都要进入一个目录很深的文件夹...
    99+
    2023-06-15
  • vsFTPd使用技巧有哪些
    这篇文章将为大家详细讲解有关vsFTPd使用技巧有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、匿名服务器的连接(独立的服务器)在/etc/vsftpd/vsftpd.conf配置文件中添加如下几...
    99+
    2023-06-16
  • ubantu使用技巧有哪些
    这篇文章给大家分享的是有关ubantu使用技巧有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。打开超级用户权限的运行程序对话框你也许已经知道用Alt+F2来打开”运行程序”对话框,然后可以输入任何命令行运行之...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作