经过一番调研之后发现了一个堪称神器的扩展:laravel-upsert 这个 Laravel 扩展为查询构建器和 Eloquent 添加了对 INSERT & UPDATE (UPSERT) 和 INSERT...:优化前5条sql,优化后2条sql laravel-upsert 扩展的特性 安装 composer require staudenmeir/laravel-upsert:"^1.0" 用法 插入和更新...第二个参数是唯一标识记录的列。除 SQL Server 外的所有数据库都要求这些列具有PRIMARY或UNIQUE索引。 提供要更新的列作为第三个参数(可选)。默认情况下,将更新所有列。...LaravelUpsert\Eloquent\HasUpsertQueries; 因为我们数据库的时间是int类型,不是laravel默认的时间格式,并且我们的插入时间和更新时间也不是laravel默认的字段...,我们需要做如下定义: //时间戳类型 public $timestamps = true; //重写插入和修改时间的字段名 const CREATED_AT = 'createtime
如果你的数据表里面不包含这两个字段,或者只包含一个,都需要设置 public $timestamps = false; 或者通过 CREATED_AT 和 UPDATED_AT 常量来设置自定义的创建和更新时间字段...时间戳: protected $dateFormat = 'U'; 这样,保存到数据库的时间格式就是 Unix 时间戳了,前提是你的 created_at 和 updated_at 字段是整型,否则会报格式错误...获取所有记录 我们可以通过模型类提供的 all 方法获取一张表的所有记录: $posts = Post::all(); 和查询构建器一样,该方法返回的也是集合,只不过是模型类集合: ?...(10)->limit(5)->get(); 对应的返回结果如下: ?...注:除获取单条记录之外,ELoquent 模型类查询返回的结果都是集合类,因此你可以在查询结果上调用集合类的所有方法,还可以自定义模型对应集合类,详情请查看对应官方文档。
有时候,我们想要获取的并不是一行或几行记录,而是某个字段的值,你当然你可以查询到一行记录后从结果对象中获取指定字段的值,但是 Laravel 为我们提供了更便捷的语法: $name = '学院君'; $...email = DB::table('users')->where('name', $name)->value('email'); 这样,通过 value 方法返回的就是指定字段的值,无需做额外的判断和提取操作...$user) { $names[] = $user->name; } }); 以上代码的意思是对 users 按照 id 字段升序排序,然后将获取的结果集每次返回5个进行处理,...= u.id 全连接:返回左表和右表中的所有行。...对应的 SQL 语句是: select * from `posts` where `views` > 0 order by `created_at` desc limit 5 offset 10; 该查询会先按照查询条件和排序条件进行过滤和排序
引言 laravel引用了强大的Carbon日期时间处理库用于日期时间的操作, 并且在数据库的格式化中使用该库。本文就说一说程序中如何方便地使用 Carbon自定义格式。...学习时间 只要成功安装了laravel的项目,已经内置了标准的carbon库文件,比如说在写入数据库字段 created_at 时是这样的格式: $item['created_at'] => "2020...或者在laravel5中使用 $dates 属性,功效与上面的方式相同: protected $dates = ['created_at', 'updated_at'] 读取的时候,该字段都会返回一个null...User 模型实例化之后,会根据 $dates 内定义的格式,调用Carbon进行实例化该字段, 那么 $user->created_at 就会返回 Carbon 对象。...接着使用Carbon对象的 format 方法,返回自定义的格式就可以了。
我们在表中还有id字段,created_at字段,updated_at字段,并没有显式赋值。但是你打开数据库表查看结果的时候,发现那些值也成功的写入了。...原有如下: id字段是 auto_increment 约束,自动递增; created_at / updated_at 字段,在Event模型内使用了 $timestamp = true。...这样laravel在处理模型数据的时候,会默认更新此二字段。 然而,对于写入数据库的那些数据,并不是所有字段都会允许写入的。在模型内我们可以手动指定哪些字段可以写,哪些字段不可以写。...新建 or 更新 接着介绍laravel模型的几个语法糖。一个常规的场景,比如在写入数据时,先判断数据库表内是否有该条记录,如果没有就创建,如何有则返回。...::create(['name' => 'Coffee and Laravel']); } 返回的总是一个 Event 对象,所以如果想要接着操作其他属性,那就接着写好了: $event->venue
引言 通过前几篇文章视图和路由的介绍,我们通过模型对象操作数据库表。 laravel模型的精巧设计使得我们操作数据层逻辑更加得心应手。 [图片] 本文我们来说说模型在读写数据中所使用的技巧。...日期时间格式化 先从最常用的地方着手,比如在迁移文件内使用的 timestamps方法,就是在表内生成 created_at和updated_at两个 datetime 类型的字段,用于标记该记录的创建时间和更新时间...下面是一个相对复杂的方法,根据不同情况返回字段name的值: [img] 如果在忽略列表,就使用纯小写字母,如果不是忽略列表的元素,首字母大写。最后组装为空格间隔的字符串返回。...对于已存在的字段属性,创建一些常用的访问器方法能提高效率,比如知道用户的姓氏和名字,我们可以返回其全名,模型内创建如下方法: class User extends Model { public function...这是laravel提供的语法糖,很好使! 写在最后 本文通过日期时间字段的格式化方法,引申出laravel模型的访问器功能,并通过实例介绍了具体的用法。
让我们开始我们的第一个模型和Migrations - 文章。该文章应该有一个标题和一个正文字段,以及创建日期。...$table->timestamps() 将会为我们生成时间戳——在created_at和updated_at时,但是不用担心设置一个默认的,Laravel将在需要时更新这些字段。...您也可以使用该$guarded 属性,以允许除属性外的所有属性。 Database Seeding Database Seeding是使用我们可以用来测试数据库的虚拟数据填充我们的数据库的过程。...的验证和开箱验证,在name,email,password,和password_confirmation为必填字段,并且反馈自动处理。...您可以使用许多外部工具来测试您的API; 然而,Laravel内部的测试是一个更好的选择 - 我们可以拥有测试API结构和结果的所有好处,同时保留对数据库的完全控制。
特别是很多写法用法以及框架知识不在文档中,语法又及其灵活就产生和每次看别人的代码都有种woc 还能这么写的感觉。所以遵循语言的编程范式,总结理解一些小技巧也是很有必要的。...下面是翻译自 Laravel-News 的一篇教程,总结了 Laravel 的对象关系映射框架(ORM)的几个小技巧。...', 'password']; // 这些字段可以在模型的 create 方法中直接创建 protected $dates = ['created_at', 'deleted_at']; //...Model类的代码,并查看所有使用的trait 方法。...,author()关联关系将返回一个空的App\Author 模型。
whereHas/orWhereHas 方法基于闭包函数定义查询条件,比如我们想要过滤发布文章标题中包含「Laravel学院」的所有用户: $users = User::whereHas('posts...; }])->where('id', '5)->get(); 底层执行的 SQL 语句如下: select * from `posts` where `id` 5 and...`deleted_at` is null order by `created_at` desc 懒惰渴求式加载 有时候,你可能觉得一次性加载所有关联数据有点浪费,对于特定条件下才使用的数据我们可以通过动态条件判断进行渴求式加载或者延迟加载...空对象模型 如果外键字段 user_id 允许为空的话,当我们访问 Post 模型上的 author 属性时,默认返回为 null。...按照上面的逻辑,我们需要先把所有标签记录查询出来,再判断哪些需要绑定关联、哪些需要解除关联、哪些需要插入新的标签记录,然后再通过 attach 和 detach 方法最终完成与对应文章的绑定和解除关联。
Laravel框架相当于Java的Spring,生态or文档 是很完善的。 之前写Java的mybatis各种sql的和字段的处理,试过php开发之后,确实很快啊。...php artisan key:generate 结果: 设置成功后会在根目录的.env中有显示:APP_KEY的新值 配置mysql数据库 ## 在.env文件修改数据库:账号密码 5.lavarel...目录文件 app: 应用的核心代码 bootstrap: 少许文件,用于框擘的启动和自动载入百置 config: 应用的所有配活文件 database...应用定ssss义的所有路由 storage: 编译后blade模板,session,文件缓存 tests: 自动化测试文件 vendor...关联表的主键 protected $fillable = [ // 3.允许被批量操作的字段, 相当于python的一个Meta中的序列器 '
引言 前两期为了说明laravel框架提供的数据库操作能力,直接使用DB门面操作, 而没有引入更为强大的eloquent orm功能。...创建模型 除了上面我们使用手动创建模型文件之外,laravel还为我们提供了命令行方式快捷创建。...'; 这个contact_id是系统维护,而非自增的,你需要显式声明不要自增这个字段: public $incrementing = false; 如果创建的表内有created_at, updated_at...等等标准字段,而在数据库表的字段默认值内允许为NULL,或者默认为NULL。...His'; 好了,关于模型的基本属性和常用方法,也就这些了。
路由缓存会大大减少注册所有路由所需的时间。在某些情况下,路由注册的速度甚至能快上 100 倍。...可修改 redirectTo 方法,返回未经身份验证的用户应该重定向到的路径。...可通过 $proxies 属性设置可信代理列表,$headers 属性设置用来检测代理的 HTTP 头字段。...以上这种用法适用于 Laravel 官方支持的所有数据库驱动器。...Laravel 服务容器是用于管理类的依赖和执行依赖注入的工具。依赖注入这个花俏名词实质上是指:类的依赖项通过构造函数,或者某些情况下通过「setter」方法「注入」到类中。
继续介绍 Laravel Eloquent 的小技巧 11....自定义属性排序 假设你有下面的一段代码: (设定了一个在返回对象时候的附加属性 ‘full_name’参见 tips5 模型属性: 时间戳, 附加属性(appends) 等) function getFullNameAttribute...但是查询的返回都是一个 Collection 对象,Laravel 为集合提供了很多方便的操作方法,sortBy 就是其中一个,当然还可以用 filter 等集合操作) 12....Laravel 默认会给所有实体类配置时间戳,如果不需要一般是在模型中指定 $timestamps = false 18. update()方法的返回值是什么?...你有没有曾想过下面这段代码返回的 result 是什么?
引言 鉴于上一章标题引起一些开发同学的巨大兴趣,本文我们接着此种行文方式继续我们的“Laravel宇宙”系列文章。...,[true]); 为了编程愉悦感,还是回归我们的laravel推荐的链式操作的方式来演示更多更复杂的功能。...方法用于指定SQL返回哪些列。...())->get(); 复杂的查询莫过于使用多表联合查询,使用子查询,使用比较绕的or查询,我们对or查询举两个例子, 大家在调试的时候,一定要对自己写的代码打印一下最终生成的SQL语句反复检查和测试,...::now()->subDay())->get(); 这一条要求要么vip是true,要么created_at字段在一天以内。
说明:本文主要聊一聊Laravel测试数据填充器Seeder的小技巧,同时介绍下Laravel开发插件三件套,这三个插件挺好用哦。同时,会将开发过程中的一些截图和代码黏上去,提高阅读效率。...TestFactoryHelperServiceProvider::class, Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class, 设计表的字段和关联...设计字段 按照上文提到的Category、Post、Comment和Tag之间的关系创建迁移Migration和模型Model,在项目根目录输入: php artisan make:model Category...function tags() { return $this->belongsToMany(Tag::class)->withTimestamps(); } } 根据迁移到库里的表生成字段属性和对应的方法提示...分享下最近发现的一张好图和一篇极赞的文章: 文章链接:Laravel的中大型專案架構
四、查询构建器Laravel框架中的Eloquent ORM提供了方便的查询构建器,用于构建复杂的查询语句。下面是一些常用的查询构建器方法。...orderBy方法orderBy方法用于添加排序条件,例如:$users = User::orderBy('created_at', 'desc')->get();上述代码中,查询了按照创建时间倒序排列的所有用户...select方法select方法用于选择需要返回的字段,例如:$users = User::select('name', 'email')->get();上述代码中,只返回用户的姓名和邮箱字段。...方法join方法用于关联查询,例如:$users = User::join('orders', 'users.id', '=', 'orders.user_id')->get();上述代码中,查询了用户和订单表中符合条件的所有记录...总结通过上述文档和示例,我们可以看出Laravel框架中的Eloquent ORM提供了便捷的对象关系映射功能,可以大大简化开发者的数据库操作。
("5cf71d3de14620598643d23d"), "ip" : "200.14.145.64", "ad_index" : 1, "created_at" : "2019-06-04 11:11...:45" } { "_id" : ObjectId("5cf71d3ee14620598643d23e"), "ip" : "200.14.145.64", "ad_index" : 1, "created_at...ad_index" : 1, "created_at" : "2019-06-04 11:11:45" } { "_id" : ObjectId("5cf71d45e14620598643d240"),...使用了Laravel-MongoDB扩展,可以基于Eloquent与Query Builder操作MySQL一样的数据php artisan thinker/ / 查询ad_clicks集合所有记录...,希望对大家的学习有所帮助,也希望大家多多支持。
各式各样的扩展: Editor, TableTools, FixedColumns …… 丰富多样的option和强大的API 支持国际化 超过2900+个单元测试 免费开源 ( MIT license...-04'], ['id' => 4,'title' => '我是标题四','created_at' => '2020-07-05'], ['id' => 5,'title' => '我是标题五...这时候就有一个问题了,后台分页时如何知道你按多少数据分页的,你的排序方式是按哪个字段进行什么排序的。...在ajax请求中利用data属性动态实时获取用户输入的数据,并把其赋值给dataTable,然后doSearch方法中重新拉起一次dataTable请求,这时请求参数就添加了需要的字段和值; 字段(我这里叫action)只要和你的colums:[{data:'action'}]对应就可以。使用laravel的模型属性和方法去实现。 <?
,但是自从接触了 laravel,一口气搞定所有的环境的表结构。...Laravel 的 Schema 门面 提供数据库无关的支持,用于在所有 Laravel 支持的数据库系统中创建和操作表 创建迁移 使用 make:migration Artisan命令来创建迁移 php...重点要说下 timestamps ,$table->timestamps() 的作用是给表增加 created_at 和 updated_at 它们的类型是 timestamps laravel 插入和编辑数据的时候会自动通过这两个字段记录操作的日期时间...很明显 laravel 默认表的主键字段名为 id 然后默认表有 created_at 和 updated_at 字段,增删改查不分家,增和改都默认有了个字段记录操作日期了,那删怎么能没有呢?...一共有5条记录 4条创建表的,1条添加字段的好我们来运行回退命令 php artisan migrate:rollback ? 然后再来看 migrations 表和 users 表 ?
领取专属 10元无门槛券
手把手带您无忧上云