使用Eloquent [‘eləkwənt] 时,数据库查询构造器的方法对模型类也是也用的,使用上只是省略了DB::table('表名')部分。...$primaryKey成员变量覆盖该字段名称,另外,Eloquent假设主键字段是自增的整数,如果你想用非自增的主键或者非数字的主键的话,必须指定模型中的public属性$incrementing为false...) ->take(10) ->get(); 可以看到,查询构造器的方法对模型类也是可以使用的 在eloquent ORM中,get和all方法查询出多个结果集,它们的返回值是一个Illuminate...与查询构造器查询方法一样,可以使用聚集函数返回结果,常见的比如max, min,avg,sum,count等 $count = App\Flight::where('active', 1)->count...,当删除记录的时候不会真实删除记录,而是设置该字段的时间戳,由Eloquent模型屏蔽已经设置该字段的数据。
在介绍批量赋值之前,我们先看一个例子,之前我们新增或者修改 Eloquent 模型时都是通过依次设置每个属性来实现的: $post = new App\Post; $post->title = '测试文章标题...创建模型 以创建模型实例为例,批量赋值允许我们以数组的方式将待设置属性以关联数组的方式传递构造函数: $post = new Post([ 'title' => '测试文章标题', '...更新模型 如果是更新模型类,也可以通过批量赋值的方式实现,只需在获取模型类后使用 fill 方法批量填充属性即可: $post = Post::findOrFail(11); $post->fill($...其底层实现原理是在支持软删除的数据表中添加一个 deleted_at 字段,这可以通过数据库迁移来实现。...该字段默认值为 NULL,表示没有被软删除。如果要在模型类中支持软删除,需要在对应模型类(在本例中是 Post 模型)中添加支持软删除的 Trait: <?
,无法显示结果。...$name:关联关系的名称 $type:根据关联名称拼接存放关联类的字段,也可自定义 $id:根据关联名称拼接存放关联类的id .也可自定义 $localKey:当前模型的主键id public function...在调用save方法向Phone模型插入值 这里Eloquent自动在phones表中添加了uid字段,并插入正确的值 使用saveMany添加多个值 $user = \App\Muser::find...,如果不允许为空会抛出异常 空对象模型 如果外键字段uid允许为空,当我们访问Phone模型上的muser属性(注意这里是属性,而不是方法)时,默认返回null,Eloquent允许我们为这种空对象定义一个默认的类型...'=>'额外字段值']]) 同步关联 使用sync方法构造多对多关联,sync方法接受ID数组,向中间表插入对应关联数据记录,在这里没有被放在数组里的id会从中间表移除。
在本文中,我将向您展示一些技巧。 1....(function ($model) { // do some logging }); } } 可能最常见的例子之一是在创建模型对象时设置一些字段值...假设你想在那一刻生成UUID字段。...模型属性:timestamps, appends等。 Eloquent模型有一些“参数”,以该类的属性形式出现。最受欢迎的可能是这些: ?...原始查询方法 有时候我们需要在Eloquent查询语句中添加原始查询 // whereRaw $orders = DB::table('orders') ->whereRaw
包含框架启动的和自动加载文件 config:包含所有程序中的配置文件,比如:cache.php(缓存)database.php(数据库)、queue.php(队列)等 database:包括数据库填充和迁移文件..., ['abcd']); laraevl内置函数dd,可人性化的打印数组:dd($result); 3.2 数据库操作 - 查询构造器 3.2.1 查询构造器简介 Laravel 查询构造器(query...3.3 Eloquent ORM ?...Student::chunk(2, function($student) { var_dump($student); }); 查询构造器之聚合函数 $result = Student::...ORM 删除数据 使用模型删除数据 通过主键值删除数据 根据指定条件删除数据 //1.
(一个是 SQL 语句,自定义属性是数据库没有的字段当然不能直接用。...原生查询方法 有时我们需要在Eloquent语句中添加原生查询语句。 幸运的是,它提供了这样的功能。...在保存的时候重写 update_at 字段 你知道 - > save()方法是可以接受参数的吗? 因此,我们可以告诉它“忽略” updated_at默认填充当前时间戳的功能。...,而不是预先在模型中定义。...正确的方法稍微有些复杂,需要用到闭包函数作为子查询: $q->where(function ($query) { $query->where('gender', 'Male')
、模型文件等 bootstrap:主要包含几个框架启动和自动加载配置的文件 config:主要包含应用程序常用的配置文件信息 database:主要包含数据库迁移和数据库填充文件 public:为应用程序的入口目录...,这里需要与composer的自动加载类进行区别;二是完成外观自动加载类中的自动加载函数的添加。...1.两个阶段 Eloquent ORM查询构造器的生成,Illuminate\Database\Eloquent\Model::newQuery() 操作命令的执行,Illuminate\Database...\Eloquent\Builder 2.ORM映射最大的好处是将数据表的结构映射成一个类对象,可以将数据以对象的形式封装使用,程序的编写将变得高效而且结构清晰 3.对于多个表而且表间存在不同的关系时,如果使用不好会严重影响程序的性能...通过中间件StartSession开启会话 2.根据sessionID来恢复之前 存储的数据,在请求处理期间可以使用恢复的数据,同时也可以向session中继续添加或删除数据。
首先构造函数传入表名users,而create则是加了一个命令 public function create() { return $this->addCommand('create'); }...本文最后讲下Eloquent中新增的对象之间的关系:多态关系,以下内容摘自[ Laravel 5.3 文档 ] Eloquent ORM —— 关联关系 表结构 多态关联允许一个模型在单个关联下属于多个不同模型...当访问 commentable 关联时,ORM 根据commentable_type 字段来判断所属模型的类型并返回相应模型实例。...首先是morphMany的构造函数: public function __construct(Builder $query, Model $parent, $morphName) { $this...addConnection 设置实例全局可访问setAsGlobal 启动Eloquent,bootEloquent 下面具体看下每个步骤做的事情。
查询作用域 全局作用域 全局作用域允许你对给定模型的所有查询添加约束。使用全局作用域功能可以为模型的所有操作增加约束。...,User::all()操作将会产生如下等价sql select * from users where age > 200 也可以使用匿名函数添加全局约束 static::addGlobalScope(...,需要手动指定是否添加约束,在模型中添加约束方法,使用前缀scope 字段设置字段名。...Mutators 在Eloquent模型中,Accessor和Mutator可以用来对模型的属性进行处理,比如我们希望存储到表中的密码字段要经过加密才行,我们可以使用Laravel的加密工具自动的对它进行加密
对于 Laravel 中标准的 Eloquent 模型类来说,每个表都应该有两个字段,一个是 updated_at ,另一个是 created_at ,分别是两个时间戳字段,用于记录数据的创建时间和修改时间...最后在查询中,我们也看到了类似于 查询构造器 的链式调用形式,通过模型的静态 where() 方法返回的实例对象,一步步地构造整个查询。...db_sex 表的模型,这个表是上篇文章中测试时使用的,就直接拿来使用了。...在这个方法中,第一个参数是指定要关联的模型,第二个参数是对应的字段。belongsTo 这个单词是什么意思呢?...下篇文章我们还将继续进行模型的学习以及整个模型的源码分析。 参考文档: https://learnku.com/docs/laravel/8.x/eloquent/9406
创建一个模型类非常简单,只用继承系统的模型就可以了: use Illuminate\Database\Eloquent\Model; class Contact extends Model {} 因为遵循的是约定大于配置的惯例...$request->input('email'); $contact->save(); return redirect('contacts'); } 创建一个合约,并使用传入的表单数据填充...所以使用map遍历集合元素时, 每个元素其实都是一个独立的Contact对象,直接给对象追加属性就可以增加字段了。...等等标准字段,而在数据库表的字段默认值内允许为NULL,或者默认为NULL。...你想要他们自动更新为当前系统时间,只需要添加这个配置项: public $timestamps = false; 存储的日期时间格式,也可以自定义: protected $dateFormat = 'Ymd
创建Form表单 (1)、在resources/views/文件夹下创建一个urls文件夹,在urls文件夹下创建一个form.blade.php文件文件名需要有blade字符串,laravel会自动识别这个文件为...《Modern PHP》(可以去pan.java1234.com搜到英文版的)这本书中倡导PHP软件开发应该使用组件components方式来做,利用别人的轮子会加速开发效率,组件components可装可卸...不过有时也推荐使用它的Query Builder查询构造器,实际上就是SQL语句封装的类,性能会比较高一些,个人遇到过一个场景:使用Eloquent ORM性能有点慢,导致PHP执行过长报503 Time...withInput()函数会在返回表单时在input里填上刚刚输入的旧数据。...Hash::make( else{ $newHash = Hash::make(Input::get('link'));//根据输入的link做hash哈希就行或者别的更简短的输入值 } (4).向link
Laravel 现在提供一套围绕 Guzzle HTTP 客户端](http://docs.guzzlephp.org/en/stable/) 构建的精简且高效的 API,允许你快速向其它 web 应用发起...你可能对 Laravel 已有的 Illuminate\Support\Str 这个类比较熟悉,它提供了各种有用的字符串操作函数。...路由模型绑定优化 路由模型绑定优化由 Taylor Otwell 开发贡献 。 自定义键名 有时你可能希望使用 id 以外的字段来解析 Eloquent 模型。...$post; }); 隐式绑定约束 有时,当在路由中隐式绑定多个 Eloquent 模型时,可能希望对第二个 Eloquent 模型进行约束,使其必须是第一个 Eloquent 模型的子类。...这些类是根据输入填充值使用「桩代码」生成文件的。 但是,有时可能希望对 Artisan 生成的文件进行小的更改。
php artisan make:model Post -mf: 创建一个名为 "Post" 的 Eloquent 模型,并生成相应的迁移文件和工厂。...· 添加或修改 DB_CONNECTION=sqlite 来指定 Laravel 使用 SQLite 作为数据库连接。...在 database/factories 目录下的 PostFactory.php 文件中,你会定义创建posts模型时所用的数据格式和规则。...避免批量赋值是指使用 Laravel 的属性来指定哪些字段可以被批量赋值,以防止不受控制的数据注入。· 播种数据库times(2)->create();factory(App\Post::class)->times(2)->create(['user_id' => 1]);数据库种子用于向数据库中填充测试数据或初始数据
到目前为止,我们介绍的所有 Eloquent 模型操作都是针对单表的,接下来我们将花三篇左右的篇幅来给大家介绍如何在 Eloquent 模型类中建立模型之间的各种关联关系,以及如何实现关联查询和更新。...(UserProfile::class); } 我们通过数据库填充技术在 user_profiles 插入一些数据,这样就可以在 User 模型实例上通过关联方法名作为动态属性访问与其对应的 UserProfile...你可能注意到了我们在定义关联关系时,仅仅指定了模型类名,并没有指定通过哪些数据表字段建立关联,这并不是说 Laravel 神通广大,能知过去未来之事,而是因为 Eloquent 对此做了默认的约定。...return $this->belongsToMany(Tag::class, 'post_tags'); } 通过数据库填充器填充一些数据到 tags 表和 post_tags 表,这样我们就可以通过关联查询查询指定...Eloquent 还提供了方法允许你获取中间表的字段,你仔细看查询结果字段,会发现 relations 字段中有一个 pivot 属性,中间表字段就存放在这个属性对象上: 我们在遍历返回结果的时候可以在循环中通过
Eloquent ORM 看起来是一个简单的机制,但是在底层,有很多半隐藏的函数和鲜为人知的方式来实现更多功能。在这篇文章中,我将演示几个小技巧。 1....写点日志啥的 // 覆盖一些属性,类似这样 $model->something = transform($something); }); } } 在创建模型对象时设置某些字段的值...一起来看看在创建模型对象时,你想要生成 UUID 字段 该怎么做。...模型特性:时间、追加等 Eloquent模型有些参数,使用类的属性形式。...原生查询方法 有时候,我们需要在 Eloquent 语句中添加原生查询。 幸运的是,确实有这样的方法。
create_users_table --create=users php artisan make:migration add_votes_to_users_table --table=users //添加字段...up 方法可为数据库添加新的数据表、字段或索引,而 down 方法则是 up 方法的逆操作。可以在这两个方法中使用 Laravel 数据库结构生成器来创建以及修改数据表。...return void */ public function down() { Schema::drop('flights'); } 1.2.2 为表添加字段...artisan migrate:refresh // 命令不仅会回滚数据库的所有迁移还会接着运行 migrate 命令 php artisan migrate //恢复 1.5 使用Seeder方式向数据库填充数据...php namespace App; use Illuminate\Database\Eloquent\Model; class Student extends Model{ protected
在 Laravel 中可以使用 where 方法实现对给定字段和给定值进行比较查询,就是这样简单。 构造器提供的 orWhere 方法。...模糊查询在我们需要对依稀记得部分数据进行查询时非常实用。...其次,在第 2 个 lower 函数内加入了 ? 占位符,这种语法即为参数绑定,它的主要作用是用于防止 SQL 注入。...这种场景我们无法使用 like 关键字,但我们有 sound like 关键字。
学习时间 只要成功安装了laravel的项目,已经内置了标准的carbon库文件,比如说在写入数据库字段 created_at 时是这样的格式: $item['created_at'] => "2020...-08-28 19:18:44" 如果不做格式化,可以手动处理该日期时间,调用carbon的解析函数构造Carbon对象: $createdAt = Carbon::parse($item['created_at...']); 获取到Carbon对象之后,使用格式化函数进行字符串格式化操作。...在模型中添加以下声明: protected $casts = [ 'created_at' => 'datetime:Y-m-d', 'updated_at' => 'datetime:Y-m-d...比如 User 模型中有下面的代码: namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model
,定义好之后,可以使用下列语法查询到关联属性了 $phone = User::find(1)->phone; Eloquent会假定关联的外键是基于模型名称的,因此Phone模型会自动使用user_id...关联关系查询 在Eloquent中,所有的关系都是使用函数定义的,可以在不执行关联查询的情况下获取关联的实例。...()->where('active', 1)->get(); 如果不需要对关联的属性添加约束,可以直接作为模型的属性访问,例如上面的例子,我们可以使用下面的方式访问User的Post $user = App...belongsTo关系的话,使用dissociate方法 $user->account()->dissociate(); $user->save(); Many to Many 关系 中间表查询条件 当查询时需要对使用中间表作为查询条件时...$user->roles()->attach($roleId); // 为用户添加角色,更新中间表的expires字段 $user->roles()->attach($roleId, ['expires
领取专属 10元无门槛券
手把手带您无忧上云