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

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

经过一番调研之后发现了一个堪称神器的扩展:laravel-upsert 这个 Laravel 扩展为查询构建器和 Eloquent 添加了对 INSERT & UPDATE (UPSERT) 和 INSERT...这可以是单个记录或多个记录。 第二个参数是唯一标识记录的列。除 SQL Server 外的所有数据库都要求这些列具有PRIMARY或UNIQUE索引。 提供要更新的列作为第三个参数(可选)。...默认情况下,将更新所有列。您可以提供带有文字或原始表达式的列名和键值对(见下文)。...该查询将为每个帖子和日期创建一个新记录或增加现有的查看计数器: DB :: table ( 'stats' )-> upsert ( [ [ 'post_id' => 1 , '...= 'updatetime'; //设置日期格式为时间戳 protected $dateFormat = 'U'; //如果取值有使用toArray()转成数组的话还需要下方的配置

5.8K20

通过 Laravel 查询构建器实现简单的增删改查操作

友情提示:更新语句和删除语句一定要谨慎注意 where 条件,否则很容器由于疏忽更新了所有数据或删除了所有数据,后果不堪设想!...使用查询构建器进行增删改查 接下来,我们开始介绍 Laravel 数据库功能的核心组件 —— 查询构建器(说是核心,是因为 Eloquent 模型的底层也是基于这个查询构建器),日常开发中,我们与数据库的交互基本都是直接或间接通过它来完成的...上述代码返回的也是包含指定查询结果的 stdClass 集合: 有时候我们可能希望返回查询结果中的第一条记录,这可以通过将 get 方法替换为 first 方法来实现: $user = DB::table...('users')->where('name', $name)->first(); 这样,返回的就是一个单个 stdClass 对象了: 默认返回所有字段,要指定查询的字段,可以通过 select 方法来实现...更新记录 更新数据库记录通过 update 方法来完成,我们可以在该方法中传入待修改字段及对应修改值数组: $id = 11; $affectedRows = DB::table('users')->where

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

    3分钟短文 | Laravel 日志全程记录 SQL 查询语句,要改写底层?

    本文就来为大家提供解决的思路。 学习时间 因为考虑到是全局记录SQL语句,那么肯定不可能在所有的数据库模型操作上都手动加上日志, 那样的效率实在是令人胆寒。...因为laravel框架提供了事件监听方式,可以在系统启动过程中注册一个事件触发器收集过程数据,记录该流程内的SQL操作,应该就大差不差了。 比如注册 illuminate.query 事件。...也就是 log 配置项是否设置为 true。...为了处理方便,将所有原始数据写入 Log 类方法的第二个传参, 我们将参数打包到数组: $data = compact('bindings', 'time', 'name'); 因为单个SQL语句绑定的参数有很多...,所以这个 bindings 数组,需要手动处理一下: foreach ($bindings as $i => $binding) { if ($binding instanceof \DateTime

    1.7K30

    Laravel学习记录--Model

    ,此字段为test_type)id:存放关联id(文章或视频)如不指定结合name构建关联字段(如果name为test,此字段为test_id)ownerKey:当前模型主键ID public function...,向中间表插入对应关联数据记录,在这里没有被放在数组里的id会从中间表移除。...,并且没有放在数组里的id会被移除,如果是这样的话那1号学生选修的课程1将被移除,同时会向中间表添加课程id=9的记录 接下来看他的执行过程是否与我们想的一样 通过Laravel Debugbar...显示的sql语句我们可以很清楚的看到其执行过程 查看数据库 和我们料想得一致,课程id为1的数据被移除,并且新增了课程id为9的记录 sync支持额外数据添加 通过id传递其他额外的数据到中间表...运行上例代码后 发现sid=1,cid=3的两条记录被移除 当在次运行时,按照定义应该会在中间表插入sid=1,cid=3的记录 和我们猜想的一样 插入数据 使用save插入单个数据

    13.6K20

    大话 JavaScript(Speaking JavaScript):第二十一章到第二十五章

    在浏览器中,记录的内容可能会被“信息”图标标记,和/或包括堆栈跟踪或代码链接。 console.log(object1?, object2?, ...) 将参数记录到控制台。...将参数记录到控制台。在浏览器中,记录的内容可能会被“警告”图标标记,和/或包括堆栈跟踪或代码链接。...将数组打印为表格,每行一个元素。可选参数columns指定在列中显示哪些属性/数组索引。如果缺少该参数,则所有属性键都将用作表格列。...程序员以字符为思考单位,而用户以字形为思考单位。有时需要使用多个字符来表示单个字形。例如,我们可以通过组合字符o和字符^(抑扬符)来产生单个字形ô。 字形 这是一种显示字形的具体方式。...例如,字形ö可以表示为单个代码点,也可以表示为一个o后跟一个组合字符¨(分音符,双点)。规范化是将文本转换为规范表示的过程;等效的代码点和代码点序列都被转换为相同的代码点(或代码点序列)。

    17010

    Laravel Valet - macOS 极简主义者的开发环境

    Laravel Valet 将您的 mac 配置为在您的机器启动时始终在后台运行 Nginx,然后使用 Dnsmasq,Valet 代理 *.test 域上的所有请求指向安装在本地计算机上的站点 Valet...此外,Valet 所依赖的守护进程将配置为在系统启动时启动 valet install 3....测试 Laravel Valet ---- 查看 Valet 的版本号 valet --version valet -V ping 任意 *.test 格式的域名,显示的 IP 的都是 127.0.0.1...valet use php@7.4 也可以在项目的根目录中创建一个 . valetphprc 文件,在这个文件中记录站点应该使用的 PHP 版本 php@7.2 使用命令写入 echo php@7.2...定制 Valet 驱动 ---- Valet 是为 Laravel 定制的开发环境,默认是不支持 ThinkPHP 等常用框架和 CMS 但是可以自己编写 Valet 驱动程序在 Valet 本身不支持的框架或

    4.2K30

    PHP:40+开发工具推荐

    Plates是为那些喜欢使用本地模板而不是编译模板的人设计的。 Laravel Laravel是一个有着优雅表达语言的开源框架。...Parsedown 一个Laravel的Parsedown包装器,能够将markdown编译成HTML。Parsedown运行很快,并支持GitHub flavored markdown....Forp是轻量级的PHP扩展,它提供了一个简单的PHP数组或JSON输出,其包含了完整的脚本调用堆栈和CPU和内存使用情况。forp是非侵入性,并提供PHP注释来完成工作。...PHP Debug Bar Debug可以很容易的集成到任何项目中,并能显示来自应用任何部分的分析数据。它来自于PHP内置数据收集器的特性和受欢迎的项目。...这个类很像PS、GIMP一类的图像编辑软件:你可以添加许多层或层组,每一层都有一个背景图像。

    3.6K70

    laravel 5.6日志理解及日志格式定义「建议收藏」

    Laravel/Lumen的日志简单系统介绍: Laravel/Lumen的日志默认是基于Monolog进行了一层封装,如果要求不高,用起来还是十分容易的,本文基于laravel5.6/Lumen5.6...5.6版对日志系统做了升级,将日志的配置单独放以了config/logging.php 配置文件中,所以现在实用多了。...---- 基本配置(解决日志路径文件名和保存周期等) 开始使用Laravel5.5时经常遇到有人问Laravel中日志的为什么只有一个文件,能不能修改日志目录,能不能修改日志文件名?...---- 高阶定制:(完全定义日志格式,本例为全Json格式) 踩了好多坑,开始尝试直接自己 new 一个 monolog 的方案,虽然也实现了全 Json 记录了,但有很多不想要的字段。...JsonFormatter extends BaseJsonFormatter { public function format(array $record) { // 这个就是最终要记录的数组

    71730

    Laravel框架关键技术解析

    :包含Laravel框架的源代码 symfony:Laravel框架的底层使用了symfony框架的部分 monolog:包括日志记录模块文件 phpunit:包含程序单元测试模块文件 B.Laravel...如果在布局模板文件中用@stop或@endsection结束这个区块,则视图文件将无法覆盖这个区块 @parent:用于显示继承的布局模板中的内容 @yield(‘区块文件’,'默认内容’):用于在布局文件中定义一个区块...,默认内容不是必须的 @include(‘子视图名称’):用于在视图文件中加载子视图文件,使得视图文件结构清晰 六、Laravel框架中的设计模式 A.服务容器 1.将服务理解为系统运行中需要的东西,如对象...控制反转是将组件间的依赖关系从程序内部提到外部容器来管理,而依赖注入是指组件依赖通过外部以参数或其他形式注入,两种说法本质上是一个意思 5.Laravel中:Illuminate\Container\Container...$deferredServices数组属性中,在使用服务容器进行解析时,如果发现这个服务在延时服务数组中,则会注册 D.响应的发送与程序终止 八、服务容器与服务提供者 A.服务容器 1.Laravel中服务容器相当于大脑

    12K20

    基于独立的 Laravel Eloquent 组件编写 ORM 模型类

    模型类负责与数据库进行交互,这里的模型指的是数据表的模型,一个模型类对应一张数据表,数据表的字段会映射为模型类的属性,我们可以通过模型类提供的方法实现对应数据表记录的增删改查,这样一来,我们就将原来面向过程的数据库操作转化为面向对象风格的编程...这里,我们通过设置 $timestamps 属性为 false 表示禁用 Eloquent 模型类自动维护时间字段机制。...,这里为了避免重构视图层代码,直接在查询结果上调用 toArray 方法将其转化为数组格式。...完成以上重构后,运行 composer dump-auto 更新自动加载文件,让新增命名空间与目录路径映射关系生效,访问博客应用,首页、专辑页、文章页显示正常,表明代码重构成功。...MVC 模式在博客应用中的落地,下篇教程,我们将探索如何通过现代工程化的方式管理前端资源和依赖,我们将引入 NPM、Webpack、Laravel Mix、jQuery 和 Bootstrap,并基于这些工具和框架替换博客应用主题

    2K10

    PHP-web框架Laravel-实现日志记录(二)

    三、自定义日志记录器Laravel框架允许我们自定义日志记录器,以满足不同的需求。我们可以通过实现Illuminate\Contracts\Logging\Log接口来定义自己的日志记录器。...该方法接收一个配置数组作为参数,并返回一个Monolog\Logger实例。在这个示例中,我们使用StreamHandler处理器将日志记录到文件中。文件路径和日志等级可以从配置数组中获取。...完成自定义日志记录器的定义后,我们需要将其添加到Laravel框架的日志记录系统中。可以在config/logging.php文件中添加一个新的通道,使用我们定义的自定义日志记录器。...下面是一个将自定义日志记录器添加到日志记录系统的示例: [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log

    73821

    Laravel Eloquent 模型关联关系(下)

    ', Post::class) ->whereNull('deleted_at'); }); })->get(); 如果你想过滤文章标题或评论都包含「Laravel...学院」的用户,将 whereExists 换成 orWhereExists 方法即可: $users = User::whereHas('posts', function ($query) {...还可以通过 saveMany 方法一次插入多条关联记录,前提是为关联模型配置了批量赋值,比如我们为 Comment 模型类配置白名单 $fillable 属性如下(你也可以不配置批量赋值,但是需要多次实例化并逐个设置评论模型属性值...前提是 user_id 允许为 null,否则会抛出异常。 空对象模型 如果外键字段 user_id 允许为空的话,当我们访问 Post 模型上的 author 属性时,默认返回为 null。...下面我们简单演示下,以 id=31 的评论记录为例,对应的模型数据及所属文章模型数据如下: 现在,我们更新下对应的 Comment 模型数据并保存: $comment = Comment::findOrFail

    19.6K30

    MySQL 8.0 新特性:多值索引 --如何给JSON数组添加索引(三)

    多值索引是在存储值数组的列上定义的二级索引。“普通”索引对每个数据记录有一个索引记录(1:1)。对于单个数据记录(N:1),多值索引可以有多个索引记录。多值索引旨在为JSON数组建立索引。...例如,在以下JSON文档中的邮政编码数组上定义的多值索引会为每个邮政编码创建一个索引记录,每个索引记录都引用同一数据记录。...这要求使用CAST(… AS … ARRAY)索引定义,该定义将JSON数组中相同类型的标量值转换为SQL数据类型数组。然后,使用SQL数据类型数组中的值透明地生成一个虚拟列。...JSON表达式匹配的值都作为单个平面数组存储在索引中。...测试显示了一个多值索引,例如,每个记录允许多达1604个整数键。

    14.6K22

    【Laravel系列7.2】错误与异常处理

    所以,在正式的线上环境中,我们会修改 .env 文件中的 APP_DEBUG 为 false 。这样的话,我们的详细错误信息就不会显示出来了,只会显示一个错误页面。...然后再次运行路由进行测试,你会发现日志被记录到了 storage/logs/zyblog.log 文件中,而 laravel.log 文件中没有记录。...如果你没有这方面的需求,其实这里不太需要变动,直接让他们记录日志就好了。 渲染异常 产生了异常之后,我们肯定要有一个显示异常的响应返回回来。.../src/Illuminate/Foundation/Http/Kernel.php 的启动加载数组里面就有一个 vendor/laravel/framework/src/Illuminate/Foundation...现在大部分的框架的处理方式也都是类似的,将错误集中到一起进行记录以及报出。

    2.8K20

    【译】深入研究 Laravel 的依赖注入容器

    不幸的是官方文档并没有涵盖所有可用的功能,因此,我决定尝试写文档为自己记录一下。以下是基于Laravel 5.4.26,其他版本可能有所不同。...例如,Laravel使用它来确保无论什么时候将单实例Container实例注入到类中都会返回它: $container->instance(Container::class, $container);...do_something(Cache $cache) { /* ... */ } $result = $container->call('do_something'); 其他参数可以作为索引或关联数组传递...如果你希望重用它,你可以将该类定义为单例。 你可以使用接口或任意名称而不是具体类。...下面这些是对其余共用方法的总结: bound() 如果类或名称使用 bind(), singleton(), instance() 或 alias()绑定, bound()将会返回true if (!

    4.7K70

    Laravel Sanctum API 授权

    Laravel Sanctum 为 SPA(单页应用程序)、移动应用程序和基于令牌的、简单的 API 提供轻量级身份验证系统。...9默认是注释掉的,需要取消注释 API 令牌认证 发布 API Tokens 要开始为用户颁发令牌,你的 User 模型应使用 Laravel\Sanctum\HasApiTokens trait...创建令牌后,你应该立即向用户显示此值: $token = $request->user()->createToken($request->token_name); return ['token' =>...你可以将字符串能力数组作为第二个参数传递给 createToken 方法: return $user->createToken('token-name', ['server:update'])->plainTextToken...Artisan 命令,可以实现这个想法: php artisan sanctum:prune-expired 比如,您可以设置一个调度任务用于删除你数据库中所有过期超过 24 小时的 token 记录

    3.1K30

    PHP

    Bash Linux Git 环境变量 显示所有环境变量 env 导出变量 export NODE_ENV='production' 删除变量 unset NODE_ENV NODE_ENV 为举例变量名...,可使用任意名称 命令行打开网页或文件夹 Linux : open xxx Windows : 打开网页 start xxx | 打开文件资源管理器 explorer Example 打开网址 <yunyoujun.cn...如果第一个命令执行成功,与操作符 ( && )才会执行第二个命令 如果第一个命令执行失败,或操作符 ( || )才会执行第二个命令 # algolia.sh export HEXO_ALGOLIA_INDEXING_KEY...三个字节 UTF-8 最大能编码的 Unicode 字符是 0xffff ,即 Unicode 中的基本多文种平面(BMP)。...因而包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码)在内的非基本多文种平面的 Unicode 字符都无法使用 MySql 的 utf8 字符集存储。

    2.6K30
    领券