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

Laravel代码简洁之道和性能优化

经过一番调研之后发现了一个堪称神器扩展:laravel-upsert 这个 Laravel 扩展为查询构建器和 Eloquent 添加了对 INSERT & UPDATE (UPSERT) 和 INSERT...,优化后22代码,代码行数少了3倍+ 查询sql条数:优化前5条sql,优化后2条sql laravel-upsert 扩展特性 安装 composer require staudenmeir/laravel-upsert...->upsert(...); 在 Eloquent 中,所有版本 LumenHasUpsertQueries都需要该特性。...当然了还是有一些注意点和坑,下面分享一下 注意问题 要根据需求添加唯一索引 根据官方文档中说明,我们model中必须添加这行代码,才能以Eloquent方式用 use \Staudenmeir\...LaravelUpsert\Eloquent\HasUpsertQueries; 因为我们数据库时间是int类型,不是laravel默认时间格式,并且我们插入时间和更新时间也不是laravel默认字段

5.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

Laravel 7 新特性-路由趟坑之路(自定义键名以及作用域)

Laravel 7 开始新增了一些新特性,今天我们来讲解下 路由绑定新用法,自定义键名(slug)以及作用域(范围限定) 首先我们 安装最新版本 Laravel ,并且创建两张数据表。...我们以前 URL 可能是如下这样: http://laravel7.test/posts/posts/1 我们是通过主键 ID 来进行查找。...举一个应用场景,我们要限定查找用户,然后在当前用户下查找他发表文章某一篇文章。...假如我们查找文章 id 为 1,同时 他 user_id 是 2, 那么访问路由就是 http://laravel7.test/api/users/2/posts/1 ?...那么我们在查找 id 为 2 数据,可以看到 他 user_id 并不是 2 了,理论上我们不应该查到才是。

2.4K10

Laravel5.7 Eloquent ORM快速入门详解

简介 Laravel 内置 Eloquent ORM 提供了一个美观、简单与数据库打交道 ActiveRecord 实现,每张数据表都对应一个与该表进行交互模型(Model),通过模型类,你可以对数据表进行查询...时间戳 默认情况下,Eloquent 期望 created_at 和 updated_at 已经存在于数据表中,如果你不想要这些 Laravel 自动管理数据列,在模型类中设置 $timestamps...该属性决定日期被如何存储到数据库中,以及模型被序列化为数组或 JSON 时日期格式: <?...firstOrCreate 方法先尝试通过给定列/值对在数据库中查找记录,如果没有找到的话则通过给定属性创建一个新记录。...firstOrNew 方法和 firstOrCreate 方法一样先尝试在数据库中查找匹配记录,如果没有找到,则返回一个新模型实例。

15K41

Laravel5.2之模型关联预加载

说明:本文主要说明Laravel Eloquent延迟预加载(Eager Loading),使用延迟预加载来减少MySQL查询次数。同时,会将开发过程中一些截图和代码黏上去,提高阅读效率。...: composer require barryvdh/laravel-debugbar --dev composer require barryvdh/laravel-ide-helper --dev...merchants表,查找products表也是这样,又有很多次query,这是N+1查找问题。...预加载查询 (1)嵌套预加载 Eloquent在通过属性访问关联数据时是延迟加载,就是只有该关联数据只有在通过属性访问它时才会被加载。在查找上层模型时可以通过预加载关联数据,避免N+1问题。...只需修改一: //app/Repository/Eloquent/ShopRepository public function all() { // TODO: Implement

2.5K41

Laravel 7发说明

引入 Laravel 框架或其组件时,应始终使用版本约束,如 ^7.0,因为 Laravel 主要版本确实包含非兼容性更改。我们会努力确保您可以在一或更短时间内更新到最新版本。...7 Laravel 7 通过引入 Laravel Sanctum,路由速度改进,自定义 Eloquent 强制转换(casts), Blade 组件标签,流畅字符串操作,开发人员专用 HTTP 客户端...有关 Laravel Sanctum 更多信息, 请查看 Sanctum 文档。 自定义 Eloquent 类型转换 自定义 Eloquent 类型转换由 Taylor Otwell 开发贡献....$post; }); 隐式绑定约束 有时,当在路由中隐式绑定多个 Eloquent 模型时,可能希望对第二个 Eloquent 模型进行约束,使其必须是第一个 Eloquent 模型子类。...例如,考虑这种情况,该情况是通过 Slug 为特定用户查找博客文章: use App\Post; use App\User; Route::get('api/users/{user}/posts/{

9K20

3分钟短文:Laravel说要用软删除,可不要真删

所以,软删除概念,极为重要。 本文我们仍然不厌其烦地讲解软删除功能。 物理删除 其实就是真实地把数据从数据库条目清除,laravel模型提供了开箱即用方法。...,用法如下: Event::destroy(12); 这样一就搞定了。...Laravel本身支持软删除,只需要进行少量配置更改,以确保在执行delete或destroy时,模型记录不会被实际删除。作为一个例子,我们修改Event模型以支持软删除。...namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes;...任何设置deleted_at为日期时间值记录,都不会包含在任何查询结果中,因此看起来已经被删除了。

2.1K00

Laravel基础

一、Laravel核心目录文件介绍 app:程序核心代码和业务逻辑代码,其中Http目录是我们业务逻辑存放点 bootstrap:包含框架启动和自动加载文件 config:包含所有程序中配置文件...[待传入变量array格式]); 例: return view('member/info', ['id'=>$id]); 三、数据库操作 3.1 DB facade(原始查找) DB facade..., ['abcd']); laraevl内置函数dd,可人性化打印数组:dd($result); 3.2 数据库操作 - 查询构造器 3.2.1 查询构造器简介 Laravel 查询构造器(query...Builder)提供方便,流畅接口,用来建立及执行数据库查找语法 使用PDO参数绑定,以保护应用程序免于SQL注入,因此传入参数不需额外转义特殊字符 基本可以满足所有的数据库操作,而且在所有支持数据库系统上都可以执行...= false; //是否开启时间戳自动调节 //使用时间戳存入数据库 protected function getDateFormat() { return time(); } //将数据库里时间戳取出时不被转换为日期

7.8K30

Laravel 模型使用软删除-左连接查询-表起别名示例

事情是这样,有写了一个左连接查询,由于表名太长,所以分别给起个别名,代码如下: public function detail() { $result = TakeOrderModel::query...分析 软删除作用域 SoftDeletingScope 源码: /** * Apply the scope to a given Eloquent query builder....* * @param \Illuminate\Database\Eloquent\Builder $builder * @param \Illuminate\Database\Eloquent\...$column; } 以上可知: this- getTable().’.’.column 即为软删除条件字段名。 解决办法 代码改成下面这样,加一 setTable 设置表名,就可以了。...以上这篇Laravel 模型使用软删除-左连接查询-表起别名示例就是小编分享给大家全部内容了,希望能给大家一个参考。

5.4K31

通过 Laravel Eloquent 模型实现简单增删改查操作

「ActiveRecord」是 ORM 一种实现模式,Eloquent 则是 Laravel「ActiveRecord」。...你可能对「约定优于配置」这个理念不太了解,看几个例子就明白了,比如模型类映射表名、主键、关联关系、日期格式系统都约定好了,一般而言,遵循这个约定,你就可以不用做任何配置、编写任何额外代码即可完成功能,...此外,Eloquent 还为我们提供了一些快捷插入方法,比如 firstOrCreate 和 firstOrNew,这两个方法都会先尝试通过指定查询条件在数据库中查找对应记录,如果没有找到的话,会创建对应模型类实例...「约定优于配置」理念在 Eloquent应用,最后还给大家演示了如何通过 Eloquent 实现数据库增删改查,当然,Eloquent 功能远不仅如此,还支持很多强大功能,比如批量赋值、软删除...本系列教程首发在Laravel学院(laravelacademy.org)

7.9K20

3分钟短文:素未谋面,Laravel数据库模型初阶入门

引言 没有模型框架是没有灵活!每个框架都会针对数据库进行深度设计, 以便快捷地进行SQL增删改查,把重复劳动抽象出来,提高应用开发效率。 [图片] 本期就来讲讲laravel模型初阶用法。...laravel支持常用数据库产品, 我们以MySQL为例。首先在配置文件内,配置参数对数据库连接。...一般,如果不手动指定,laravel模型内 $connection 就是取配置文件内这一: 'default' => env('DB_CONNECTION', 'mysql'), 也即是mysql...其中内容视不同laravel版本而有所不同,但是基础内容未变: [pic] 有了模型对应数据库表,现在我们还缺一个数据库表,在迁移文件内进行配置。...写在最后 本文讲解了laravel在连接数据库,创建数据库表迁移文件内容。对于强大Eloquent ORM 这只是一个开始。 Happy coding :-)

95331

Laravel系列4.3】模型Eloquent ORM使用(一)

我们在关系型数据库中,一数据就可以看成是一个对象,整个表就可以看成是这个对象列表。这就是非常简单地针对 ORM 理解。 Java 中 Hibernate 就是早期非常经典 ORM 框架。...其实,Laravel Eloquent ORM 也是 Active Record 实现,这也是现在 ORM 主流。...同样,更新时候我们是先通过静态方法 find() 查找并返回一个数据对象,然后修改它属性再 update() 就可以了。...它判断是这个 key 是否是抽象基类 laravel/framework/src/Illuminate/Database/Eloquent/Model.php ,而不是我们定义 MTest ,用是一个...下篇文章我们还将继续进行模型学习以及整个模型源码分析。 参考文档: https://learnku.com/docs/laravel/8.x/eloquent/9406

8.8K20

static 静态变量引起 Laravel 中队列一个 Bug

php namespace App\Models; use Illuminate\Database\Eloquent\Model; class AttributeRequestLog extends...直到某一上了队列之后, 有同事反馈, 有异常数据上报. 赶紧排查了一下日志, 发现队列中日志打点数据有问题,随后增加更多打点, 最后定位到了这个地方...., 会运行其handle方法 Laravel Laravel 实际上是拿到队列驱动,然后转到worker去运行任务, 传递了一个参数once是否只运行一个任务,这里我们直接查看daemon方法 转到...src\Illuminate\Queue\Worker.phpdaemon方法 Laravel 前面三代码去监听退出信号,然后主动退出进程 下一$lastRestart是缓存中获取一个时间戳...Laravel Laravel 这里我们直接看fire方法即可, 然后找到对应队列驱动类,继承了父级fire方法 Laravel 实际上是反射了这个job类然后调用它对应方法

17510

Laravel Sanctum API 授权

Laravel Sanctum 为 SPA(单页应用程序)、移动应用程序和基于令牌、简单 API 提供轻量级身份验证系统。...简单来说,前后端分离项目,使用 token 验证登陆状态,可以选它;另外,同类型还有 jwt 比较火 安装 Laravel 9 已经包含了 Laravel Sanctum,所以下面的步骤看看就行了...Illuminate\Routing\Middleware\SubstituteBindings::class, ], 注意,EnsureFrontendRequestsAreStateful 这一,...tokens Eloquent 关系访问用户所有令牌: foreach ($user->tokens as $token) { // } 令牌能力 Sanctum 允许你将 「能力」分配给令牌...修改 sanctum 配置文件中 expiration 选项(默认为 null),此选项设置数字表示多少分钟后过期: // 365后过期 'expiration' => 525600, 如果您程序中配置了

3K30

25:计算两个日期之间天数

25:计算两个日期之间天数 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB描述 给定两个日期,计算相差天数。...比如2010-1-1和2010-1-3相差2。 输入共两: 第一包含三个整数startYear,startMonth,startDay,分别是起始年、月、日。...第二包含三个整数endYear,endMonth,endDay,分别是结束年、月、日。 相邻两个整数之间用单个空格隔开。 年份范围在1~3000。保证日期正确且结束日期早于起始日期。...输出输出一个整数,即是两个日期相差天数。...样例输入 2008 1 1 2009 1 1 样例输出 366 提示闰年被定义为能被4整除年份,但是能被100整除而不能被400整除年是例外,它们不是闰年。闰年2月份有29

4.9K60

Laravel学习记录--Model

Laravel 自带 软删除功能 就利用全局作用域从数据库中提取「未删除」模型。编写自定义全局作用域可以提供一个方便、简单方法来确保给定模型每个查询都受到一定约束。...,如下查找商品价格>200记录 在定义动态作用域中 public function scopePrice($query,$price){ return $query->where('price...使用渴求式加载,即根据预先需求查询出所有数据 为了验证[渴求式加载]好处,举下列例子 这里用到了Laravel Debugbar 调试 安装方法可参照我另一个博客 - - - Laravel...默认约定 } 查找关联数据 public function show(){ $res = Image::find(1); dump($res->imagetable...会被移除,如果是这样的话那1号学生选修课程1将被移除,同时会向中间表添加课程id=9记录 接下来看他执行过程是否与我们想一样 通过Laravel Debugbar显示sql语句我们可以很清楚看到其执行过程

13.5K20
领券