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

Laravel学习记录--Model

多态关联 - 多态一 - 多态一 - 多态 关联查询 继承:ILLuminate\Database\Eloquent\Model model与名的关系...使用渴求式加载,即根据预先需求查询出所有数据 为了验证[渴求式加载]的好处,举下列例子 这里用到了Laravel Debugbar 调试 安装方法可参照我的另一个博客 - - - Laravel...渴求式加载多个关联关系 有时候你需要在单个操作渴求式加载多个不同的关联关系,要实现这一功能,只需添加参数到with方法即可 ,以逗号分割 ,查询文章的作者即所在栏目 嵌套的渴求式加载 要使用嵌套的渴求式加载的关联关系...,使用“.”连接即可,如我们需要获取所有书的作者以及作者的个人联系方式。...-多多态关联 学到了这里,理解多态也不是很难了,还是举例说明,文章与标签的关系这个大家知道,因此我们需要建立文章与标签,以及中间,中间存放文章与标签的id使他们建立连接,这是常规套路

13.6K20

Laravel源码分析之模型关联

上篇文章我们主要讲了Eloquent Model关于基础的CRUD方法的实现,Eloquent Model除了基础的CRUD外还有一个很重要的部分叫模型关联,它通过面向对象的方式优雅地把数据之间的关联关系抽象到了...在开发我们经常遇到的关联大致有三种:一一,一,其中一一是一种特殊的一多关联。我们通过官方文档里的例子来看一下Laravel是怎么定义这两种关联的。... 多关联不同于一一和一多关联它需要一张中间来记录两端数据的关联关系,官方文档里以用户角色为例子阐述了多关联的使用方法,我们也以这个例子来看一下底层是怎么来定义多关联的。...\Database\Eloquent\Relations\BelongsToMany类的实例,与定义一多关联一样,实例化BelongsToMany定义里与关联相关的配置:中间名、关联的模型、父模型在中间的外键名...users ON users.id = posts.user_id WHERE users.country_id = 1 SQL查询我们也可以看到远层一生成的语句非常类似,唯一的区别就是它的中间对应的是一个已定义的模型

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

    最为常用的Laravel操作(1)-Eloquent模型

    关闭时间戳记录 public $timestamps = false; 获取模型数据 // Eloquent 的 all 方法返回模型所有结果 $flights = App\Flight::all(...$user->account()->dissociate(); $user->save(); 附加 / 分离多关联模型 $user = App\User::find(1); // 在连接模型的中间插入记录...]); // 从中间移除相应的记录: 指定用户移除某个角色 $user->roles()->detach($roleId); // 从中间移除相应的记录: 指定用户移除所有角色 $user->...处理多关联, save 方法接收中间数组作为第二个参数: App\User::find(1)->roles()->save($role, ['expires' => $expires]); 访问器和修改器...例如, 你可能想要使用 Laravel 加密器存储在数据库的数据进行加密, 并且在 Eloquent 模型访问自动进行解密.

    32100

    Laravel5.2之Seeder填充数据小技巧

    而且,Category与Post是一关系One-Many:一个分类下有很多Post,一个Post只能归属于一个Category;Post与Comment是一关系One-Many:一篇博客Post...下有很多Comment,一条Comment只能归属于一篇Post;Post与Tag是关系Many-Many:一篇Post有很多Tag,一个Tag下有很多Post。...Tag关系,还需要一张存放两者关系: //关系,中间的命名laravel默认按照两张表字母排序来的,写成tag_post会找不到中间 php artisan make:migration...static \Illuminate\Database\Query\Builder|\App\Post whereUpdatedAt($value) * @mixin \Eloquent */ class...(PostTagTableSeeder::class); } } 输入路由/artisan后,生成了10个Category、10个Post、50个Comments、10个Tag和PostTag关系

    3.6K42

    orm 系列 之 Eloquent演化历程2

    '); // 文件获取migrate files $files = $this->getMigrationFiles($path); // 获取已经执行的migration...本文最后讲下Eloquent中新增的对象之间的关系:多态关系,以下内容摘自[ Laravel 5.3 文档 ] Eloquent ORM —— 关联关系 结构 多态关联允许一个模型在单个关联下属于多个不同模型...例如,假设应用用户既可以对文章进行评论也可以对视频进行评论,使用多态关联,你可以在这两种场景下使用单个comments,首先,让我们看看构建这种关联关系需要的结构: posts id - integer...Manager,记得网上搜索过关键字Using Eloquent outside Laravel,我们可以看到一篇Vivek Kumar Bansal写的文章,文章2方面介绍了怎么使用Eloquent...Schema和Query,同时DatabaseManger和Eloquent还处理协作关系Eloquent负责领域类的打理,最后ConnectionFactory则打点着所有的Connection,提供基础的功能

    2.4K30

    Laravel Eloquent 模型关联关系(下)

    性能上来说,渴求式加载更优,因为它会提前数据库一次性查询所有关联数据,而懒惰式加载在每次查询动态属性的时候才会去执行查询,会多次连接数据库,性能上差一些(数据库操作主要开销在数据库连接上,所以在开发过程如果想优化性能...,假设要循环 N 次的话,加上文章模型本身的获取,总共需要进行 N + 1 次查询,而 PHP 对数据库的连接是短连接,每次都要重新连接数据库,所以性能角度考虑不建议使用这种方式。...另外,如果访问的是模型实例上的 author() 方法,返回的不是用户实例了,而是一个关联关系实例,该实例注入了查询构建器,所以你可以在其基础上通过方法链的方式构建查询构建器进行更加复杂的查询,我们以一个一的查询为例...Eloquent 提供了这种同步机制帮助我们更新子模型触发父模型的更新时间 updated_at 字段值更新,要让该机制生效,需要在子模型配置 $touches 属性: // 要触发更新的父级关联关系...,我们分了三篇的篇幅来介绍 Eloquent 模型的管理关系,回顾一下,主要包含以下内容: 七种关联关系的定义:一一、一、远层一、一一的多态关联、一的多态关联、的多态关联;

    19.6K30

    3分钟短文:Laravel 模型查询数据库的几个关键方法

    引言 本期继续我们的laravel学习,主要说一说laravel使用eloquent orm 模型 读取数据库条目的几个常用方法。 ?...学习时间 让我们最简单的例子开始,就是获取数据库所有的条目,返回一个集合。...eloquent门面为我们提供了很多好用的链式操作方法, 在query builder筛选出合适的条目后,返回一个eloquent collection,或者是一个 基类的collection对象,可以直接使用集合的方法操作数据集...所以我们推荐使用where语句进行数据库SQL操作,将合适的结果集返回,这样精简了数据库负载, 再者,使用集合的操作方法,结果集进行进一步的格式化,效率会高的。...写在最后 本文主要讲了数据库查询相关的内容,包括获取全量数据,获取单条数据, 分块拉取数据,以及聚合函数等,这些常规操作集合上期讲的查询约束项, 基本上可以涵盖编程的大多数需求了。

    2.1K40

    Laravel5.2之模型关联预加载

    说明:本文主要说明Laravel Eloquent的延迟预加载(Eager Loading),使用延迟预加载来减少MySQL查询次数。同时,会将开发过程的一些截图和代码黏上去,提高阅读效率。...' => 'one-to-many', ] 现在要求做出一个页面以列表形式显示每个店铺,每个店铺块包含店铺信息标题、包含店铺商家信息姓名和电话、包含拥有的商品信息介绍和价格。...artisan ide-helper:generate php artisan ide-helper:models php artisan test-factory-helper:generate 关系如图...,耗时38.89ms,效率很低,仔细观察每一个statement就发现这是先扫描shops,再根据shops每一个merchant_id去查找merchants,查找products也是这样,又有很多次...预加载查询 (1)嵌套预加载 Eloquent在通过属性访问关联数据是延迟加载的,就是只有该关联数据只有在通过属性访问它才会被加载。在查找上层模型可以通过预加载关联数据,避免N+1问题。

    2.6K41

    Laravel5.7 Eloquent ORM快速入门详解

    的 all 方法返回模型所有结果,由于每一个 Eloquent 模型都是一个查询构建器,你还可以添加约束条件到查询,然后使用 get 方法获取对应结果: $flights = App\Flight...'bar')- cursor() as $flight) { // } 获取单个模型/聚合结果 当然,除了给定获取所有记录之外,还可以使用 find 和 first 获取单个记录。...注:通过 Eloquent 进行批量更新,saved 和 updated 模型事件将不会在更新模型触发。这是因为在进行批量更新并没有数据库获取模型。...Laravel 自带的软删除功能就使用了全局作用域来数据库拉出所有没有被删除的模型。编写自定义的全局作用域可以提供一种方便的、简单的方式来确保给定模型的每个查询都有特定的条件约束。...,可以使用观察者来所有监听器分组到一个类,观察者类拥有反射你想要监听的 Eloquent 事件对应的方法名,每个方法接收模型作为唯一参数。

    15.1K41

    3分钟短文:Laravel 软删除说到模型作用域的概念

    我们软删除的使用,再顺便说一说模型内的作用域的概念。 代码时间 常规的删除操作分两步进行,一步是把数据数据库查询出来,使用laravel模型的方法, 则返回的是一个模型对象。...数据库的内记录直接移除了,这在重要的, 比如user,order,payment这些关系用户权限,资金支付等等的重要数据资源上,物理删除是不被允许的。...所以引入了软删除的概念,就是在内添加一个字段,用于标记,这一行条目是否算是删除状态。在laravel, 这个软删除字段默认是 deleted_at。你也可以在模型手动指定。...$builder) { $builder->where('active', true); }); }} 那么所有的模型查询,都会默认加上声明的where...写在最后 本文laravel模型的写操作删除动作,讲到了软删除的概念。进而引申出来本地作用域和全局作用域的使用。软删除几乎贯穿了我们应用的始终,需要大家勤学苦练。

    1.4K30

    Laravel 模型关联基础教程详解

    Laravel 定义模型关联是每个 Laravel 开发者可能已经做过不止一次的事情。但是在试图实现关联可能会遇到各种问题。因为 Laravel 有各种各样的关联,你应该选择哪一个?...Laravel 有 3 种不同的关联类型。 一一 一 我们将逐个探讨不同的关联类型并解释一下应该什么时候使用它们。 一一 一一关联是目前存在的最基本的关联。...不包含 supplier_id 列,供应商也可以通过使用 「has one through」 关系访问 product_history 记录。...此外,多关联有一个pivot 属性。 此属性表示中间,可以像任何其他模型一样使用。...举个例子,假设连接的有 created_at 字段,我们就可以使用 pivot 来获取 created_at 字段。 <?

    5.5K31

    orm 系列 之 Eloquent使用2

    上一篇介绍了Eloquent的migrations和Scheme Builder功能,本文介绍Eloquent最重要的Model。...本文会按照下面的顺序介绍: Model的创建 CRUD操作 查询和聚合操作 Hydrate 组合查询 Model创建 在laravel,创建一个model非常简单,我们可以通过下面的命令创建 php...,从这个model出发,我们可能想要知道Book是在哪个的,这个时候,我们可以设置$table属性,同时,我们想要设置主键及其类型,我们就设置$primaryKey,$keyType,同时,我们可能还想要指定数据库连接...key和Model的attribute对应,Eloquent的方法是直接将属性存储为一个$attributes数组,然后由用户自己根据字段名进行获取,但是,其实这也会有个问题,就是一旦字段名更改了,我们必须要去更改所有直接使用字段名的地方...以上就是Eloquent的Model操作的基本介绍,下节将会介绍Eloquent关系

    56041

    跟我一起学Laravel-EloquentORM高级部分

    查询作用域 全局作用域 全局作用域允许你给定模型的所有查询添加约束。使用全局作用域功能可以为模型的所有操作增加约束。...the scope to a given Eloquent query builder...$query) { return $query->where('active', 1); } } 使用上述添加的本地约束查询,只需要在查询中使用scope前缀的方法,去掉..., restored 使用场景 假设我们希望保存用户的时候用户进行校验,校验通过后才允许保存到数据库,可以在服务提供者为模型的事件绑定监听 <?...Mutators 在Eloquent模型,Accessor和Mutator可以用来模型的属性进行处理,比如我们希望存储到的密码字段要经过加密才行,我们可以使用Laravel的加密工具自动的它进行加密

    1.3K40

    orm 系列 之 Eloquent演化历程1

    Eloquent Eloquentlaravel的orm,采取的是active record的设计模式,里面的对象不仅包括领域逻辑,还包括了数据库操作,但是大家平时使用的时候可能没有探究eloquent...初始化 Eloquent首先要对数据库连接做抽象,于是有了Connection类,内部主要是PDO的一个封装,但是如果只有Connection的话,一个问题是,我们需要直面sql,于是就有了Builder...此时关系处理上主要的逻辑是调用Model的HasOne等关系的方法,返回Relation的子类,然后通过Relation来处理进而返回数据,这么说可能有点绕,我们下面具体介绍下每个关系的实现,大家可能就理解了...); 当使用User::with('phone')->get()的时候,就会去eager load进phone了,具体的过程,在调用Eloquent\Builder的get的时候,里面有个逻辑是: if...role,joinuser_role 在get的时候,其逻辑和HasOne等关系所有不同,代码如下: // class belongsToMany public function get($columns

    1.1K30

    Laravel框架关键技术解析

    query()方法(new static)->newQuery(); F.Laravel使用的其他新特性 1.trait 优先级:当前类的方法会覆盖trait的方法,trait的方法会覆盖基类的方法...控制反转是将组件间的依赖关系程序内部提到外部容器来管理,而依赖注入是指组件依赖通过外部以参数或其他形式注入,两种说法本质上是一个意思 5.Laravel:Illuminate\Container\Container...bootstrap()-->>调用服务容器的registerConfiguredProviders(),配置文件中提取所有的服务提供者 3.缓载服务提供者:对于不是每个请求都需要使用的服务只有在需要才临时进行服务绑定...\Database\Eloquent\Model::newQuery() 操作命令的执行,Illuminate\Database\Eloquent\Builder 2.ORM映射最大的好处是将数据的结构映射成一个类对象...,可以将数据以对象的形式封装使用,程序的编写将变得高效而且结构清晰 3.对于多个而且间存在不同的关系,如果使用不好会严重影响程序的性能 4.创建命令:php artisan make:model

    12K20

    为什么 Laravel 这么优秀?

    接下来我们将尝试构建一个简易的课程系统,在这个系统中有教师(Teacher),学生(Student)和课程(Course),它们之间覆盖了简单的一一、一多等的关系,这在日常开发也很常见。...因为我们已经完成了数据字段的定义、关系、以及最重要的一步:如何将数据及数据之间的关系写入数据库,下面简单的来介绍下在 Laravel 是如何完成的。...可以高效的使用 Eloquent ORM 实现各种查询;如上面的例子我们使用了 withCount 来查询课程的学生数量、用 with 加载课程对应的教师;还可以指定生成的 SQL 查询只包含某几个字段... Java 的 Spring 会在编译为 Sprint Container 填充不同的对象,在使用时就能向容器获取不同的值。...; CacheServiceProvider 会向容器中注册 Cache 对象,后续在使用 Cache::get 使用的是这里注册的 Cache 对象,在注册阶段不应该向容器获取值,因为此时服务可能还没有

    22610
    领券