1.后台控制器中ArticleController中加载 formBuilder,listBuilder类; 2.实例化FormBuilder对象,调用类中的方法;...初始化时加载Builder/formbuilder.html文件; 4.包含加载/system/Tpl/Admin/Builder/FormType/formTpl.html 文件...5.通过switch case 加载对应的文件 6、select文件加载使用 ->addFormItem(‘cate_id” select‘self::NOT_EMPTY.’所属分类
此外,Eloquent 默认主键字段是自增的整型数据,这意味着主键将会被自动转化为 int 类型,如果你想要使用非自增或非数字类型主键,必须在对应模型中设置 incrementing 属性为 false...默认情况下,所有的 Eloquent 模型使用应用配置中的默认数据库连接,如果你想要为模型指定不同的连接,可以通过 $connection 属性来设置: <?...Eloquent 的 all 方法返回模型表的所有结果,由于每一个 Eloquent 模型都是一个查询构建器,你还可以添加约束条件到查询,然后使用 get 方法获取对应结果: $flights = App...\Eloquent\Builder */ public function scopeActive($query) { return $query- where('active', 1);...\Database\Eloquent\Builder */ public function scopeOfType($query, $type) { return $query- where
加载Eloquent Builder Eloquent Builder是在上文说到的Query Builder的基础上实现的,我们还是通过具体的例子来看,上文用到的: DB::table('user')...Builder的时候把数据库连接的QueryBuilder对象传给了它的构造方法, 下面就去看一下Eloquent Builder的源码。...依赖的还是数据库连接的Query Builder实例去最后执行的数据库update。...Model删除 Eloquent Model的delete操作也是一样, 通过Eloquent Builder去执行数据库连接的Query Builder里的delete方法删除数据库记录: //Eloquent...是在Query Builder的基础上做了进一步封装, Eloquent Builder会把这些CRUD方法的调用转给Query Builder里对应的方法来完成操作,所以在Query Builder里能使用的方法到
OK, 总的来说,通过了解Query Builder的实现原理后,知道其并不复杂或神秘,只是一个对PDO更友好封装的包裹,Query Builder有几个重要的类或概念:连接类MySqlConnection...及其为其服务的连接器MySqlConnector;Builder 类;SQL语法解析器MySqlGrammar;后置处理器MySqlProcessor。...那Eloquent ORM又是什么,与Query Builder是什么关系呢?既然有了Query Builder,为何还提供了Eloquent ORM呢?...实际上,Eloquent ORM又是对Query Builder的封装,这样可以实现更多好用且Query Builder所没有的功能,如Model Relationships;Accessor/Mutator...以后再聊Eloquent ORM的实现原理吧。 总结:本文主要学习了Query Builder编译SQL细节和执行SQL逻辑。后续在分享下Eloquent ORM的实现原理,到时见。
查询作用域 全局作用域 全局作用域允许你对给定模型的所有查询添加约束。使用全局作用域功能可以为模型的所有操作增加约束。...the scope to a given Eloquent query builder...'age', function(Builder $builder) { $builder->where('age', '>', 200); }); 查询中要移除全局约束的限制,使用withoutGlobalScope...,需要手动指定是否添加约束,在模型中添加约束方法,使用前缀scope <?...$query) { return $query->where('active', 1); } } 使用上述添加的本地约束查询,只需要在查询中使用scope前缀的方法,去掉
,所以你可以按照自己的喜好在 app 目录下创建 Scopes目录并实现接口(Illuminate\Database\Eloquent\Scope)的方法apply。...{ /** * Apply the scope to a given Eloquent query builder..., Model $model) { return $builder->where('status', '>', 0); } } 使用作用域 只需要在你需要使用的模型的..."boot启动"方法中使用static::addGlobalScope(new 你的作用域类); <?...当然,假如你感觉到上面的方法比较麻,也可以使用匿名的全局作用域 <?
= $this- newQuery(); //返回Illuminate\Database\Eloquent\Builder对象 return call_user_func_array([$query..., $method], $parameters); } 相当于调用Illuminate\Database\Eloquent\Builder对象里的where方法和get方法,这两个方法里其实 其实是封装调用了...$this- useWritePdo); //调用connection 对象的select方法 } 再看connection对象是怎么传到Illuminate\Database\Eloquent\Builder...类实例里的: Model类的newQuery方法: /** * Get a new query builder for the model's table...类的$resolver属性(连接解析器)的设定是通过 Illuminate\Database\DatabaseServiceProvider 里的boot方法设置的 这样Model类的getConnection
* * @return \Illuminate\Database\Eloquent\Builder */ public function scopePopular($query) { return...\Builder */ public function scopeActive($query) { return $query->where('active', 1); } // 使用本地作用域...* @param \Illuminate\Database\Eloquent\Builder $query * @param mixed $type * @return \Illuminate\Database...\Eloquent\Builder */ public function scopeOfType($query, $type) { return $query->where('type', $...例如, 你可能想要使用 Laravel 加密器对存储在数据库中的数据进行加密, 并且在 Eloquent 模型中访问时自动进行解密.
:是前一篇讲的对于Active Record模式中Model的功能,包括了Model、Builder和Relation功能,忘记的可以去看前一篇orm 系列 之 Eloquent演化历程1的内容 Query...首先是morphMany的构造函数: public function __construct(Builder $query, Model $parent, $morphName) { $this...general_ci', 'prefix' => 'prefix_' ]); $capsule->setAsGlobal(); $capsule->bootEloquent(); 建立有3个步骤 添加数据库连接...第一步addConnection,添加了默认的数据库配置,通过这个配置,我们可以通过DatabaseManager.connection来获取数据库连接connection,从而进行操作。...User extends Eloquent { // } 此处Eloquent已经通过初始化设置了静态变量$resolver,我们可以方便的获取连接Connection了,也就是有了数据库操作的功能
经过一番调研之后发现了一个堪称神器的扩展:laravel-upsert 这个 Laravel 扩展为查询构建器和 Eloquent 添加了对 INSERT & UPDATE (UPSERT) 和 INSERT...upsert()插入一个新的用户或更新现有的一个。...你可以在 Eloquent 模型中使用 UPSERT 和 INSERT IGNORE 查询。...Lumen 如果您使用 Lumen,则必须手动实例化查询构建器: $builder = new \Staudenmeir\LaravelUpsert\Query\Builder(app('db')->connection...当然了还是有一些注意点和坑,下面分享一下 注意的问题 要根据需求添加唯一索引 根据官方文档中的说明,我们的model中必须添加这行代码,才能以Eloquent的方式用 use \Staudenmeir\
添加 $msg = new Msg; $msg->title='mytitle' $msg->save();//保存操作 指定连接的数据库 protected $connection ='连接名'...* 将范围应用于给定的 Eloquent 查询生成器 * * @param \Illuminate\Database\Eloquent\Builder $builder...,使用“.”连接即可,如我们需要获取所有书的作者以及作者的个人联系方式。...在调用save方法向Phone模型插入值 这里Eloquent自动在phones表中添加了uid字段,并插入正确的值 使用saveMany添加多个值 $user = \App\Muser::find...create方法添加值 create方法和save方法一样也是向模型插入值,不同的是save接收的是一个完整的Eloquent实例,而creare接收的是一个纯数组,需要注意的是使用create方法需要设置
对于写操作还有更为重要的一个方法, 就是数据的删除。删除数据,有物理删除和软删除的区别。 ? 我们从软删除的使用,再顺便说一说模型内的作用域的概念。...如果你使用系统的migrate方法创建迁移文件,那么只用在构造方法中添加如下代码: Schema::table('contacts', function (Blueprint $table) {...$table->softDeletes();}); 那么迁移成功后,生成的contacts表内会添加deleted_at字段。...然后在模型中,引入软删除的功能,将其进行全局生效的使用。...\Database\Eloquent\Model;use Illuminate\Database\Eloquent\Builder;class ActiveScope implements Scope{
Eloquent Eloquent是laravel中的orm,采取的是active record的设计模式,里面的对象不仅包括领域逻辑,还包括了数据库操作,但是大家平时使用的时候可能没有探究eloquent...初始化 Eloquent首先要对数据库连接做抽象,于是有了Connection类,内部主要是对PDO的一个封装,但是如果只有Connection的话,一个问题是,我们需要直面sql,于是就有了Builder...类,其功能就是屏蔽sql,让我们能用面向对象的方式来完成sql的查询功能,Builder应该是sql builder,此时Eloquent的主要的类就如下: 其中Builder负责sql的组装,Connection...\Builder的一个封装,支持面向对象式的sql操作,我们下面来看下当我们使用HasOne的时候发生了什么。..., $foreign_key); 当使用User::with('phone')->get()的时候,就会去eager load进phone了,具体的过程中,在调用Eloquent\Builder的get
,按照约定Eloquent 默认使用父级模型名的「snake case」形式、加上 _id 后缀名作为外键字段。...与此同时给关联关系设置了join和where约束,以User类里的多对多关联举例, performJoin方法为其添加的join约束如下: $query->join('role_user', 'roles.id...针对这个例子 performJoin为关联添加的join约束为: query->join('users', 'users.id', '=', 'posts.user_id') 添加的where约束为:...Eloquent Builder去执行。...func_get_args() : $relations ); } } //Eloquent Builder class Builder { public function
事情是这样的,有天写了一个左连接查询,由于表名太长,所以分别给起个别名,代码如下: 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\...Model $model * @return void */ public function apply(Builder $builder, Model $model) { $builder-...以上这篇Laravel 模型使用软删除-左连接查询-表起别名示例就是小编分享给大家的全部内容了,希望能给大家一个参考。
hasMany('App\User'); } 但是你知道吗,此时我们已经可以添加 where 或 orderBy 了!...image.png 更多请查看默认abstract Model class 的代码,并查看所有使用的特征。...') { $query->orderBy('created_at', request('ordering_rule', 'desc')); } 但有更好的方法 - 使用 when(): $query...原始查询方法 有时候我们需要在Eloquent查询语句中添加原始查询 // whereRaw $orders = DB::table('orders') ->whereRaw...$q->where('age', '>=', 65); 正确的方法有点复杂,使用闭包函数作为子查询: $q->where(function ($query) { $query->where('gender
说明:本文主要说明Laravel Eloquent的延迟预加载(Eager Loading),使用延迟预加载来减少MySQL查询次数。同时,会将开发过程中的一些截图和代码黏上去,提高阅读效率。...\Illuminate\Database\Query\Builder|\App\Phone whereUpdatedAt($value) * @mixin \Eloquent */ class Phone...static \Illuminate\Database\Query\Builder|\App\Shop whereUpdatedAt($value) * @mixin \Eloquent */ class...而且,使用预加载超级简单。...发现:只有4个query,耗时3.58ms,效率提高很多。把原来的N+1这种query改造成了where..in..这种query,效率提高不少。可以用EXPLAIN来查看SQL语句的执行计划。
Query Builder并不复杂或神秘,只是在PDO扩展的基础上又开放封闭的包装了一层,提供了fluent api,使得书写的代码也很简洁流畅。...Eloquent的主要实现类,如重点的Model类,Builder类,Relations子文件夹内包含的表的关系类。...是核心的组件,也是类最多的文件夹 Events 装载事件类的文件夹 Migrations 实际执行migrate相关命令的类 Query Query Builder的代码主要在这个文件夹,主要的类是Builder...'db',通常会通过该manager来'向下走'到对应的数据库实现类,是重要的类 Seeder class 主要负责seed命令时的操作 数据库连接的实例化 Query Builder主要在Query...文件夹下,以一行简单又经常使用的代码为例来学习下内部实现的原理吧: Route::get('/query_builder', function() { // Query Builder
上一篇介绍了Eloquent的migrations和Scheme Builder功能,本文介绍Eloquent最重要的Model。...,从这个model出发,我们可能想要知道Book是在哪个表中的,这个时候,我们可以设置$table属性,同时,我们想要设置主键及其类型,我们就设置$primaryKey,$keyType,同时,我们可能还想要指定数据库连接...都是通过调用Eloquent/Builder来实现的。...查询和聚合 Eloquent提供了丰富的查询方式,通过前面的__call方法分析,我们知道,这些最终调用的都是Eloquent/Builder方法,where方法也不例外,where其最简单的形式如下:...key和Model的attribute对应,Eloquent的方法是直接将属性存储为一个$attributes数组,然后由用户自己根据字段名进行获取,但是,其实这也会有个问题,就是一旦字段名更改了,我们必须要去更改所有直接使用字段名的地方
领取专属 10元无门槛券
手把手带您无忧上云