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

PHP-web框架Laravel-Eloquent ORM(二)

三、模型关联Laravel框架中的Eloquent ORM提供了方便的模型关联功能,用于定义不同表之间的关联关系。下面是几个常用的模型关联类型。...定义了一个User模型和一个Phone模型,通过在User模型中定义phone方法和在Phone模型中定义user方法,实现了这两个模型之间的一对一关联关系。...定义了一个Post模型和一个Comment模型,通过在Post模型中定义comments方法和在Comment模型中定义post方法,实现了这两个模型之间的一对多关联关系。...其中,hasMany方法表示一个Post模型拥有多个Comment模型,belongsTo方法表示一个Comment模型属于一个Post模型。多对多关联多对多关联表示两个模型之间存在多对多的关联关系。...定义了一个User模型和一个Role模型,通过在User模型中定义roles方法和在Role模型中定义users方法,实现了这两个模型之间的多对多关联关系。

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

    深入理解 Laravel Eloquent(三)——模型间关系(关联)

    在本篇文章中,我将跟大家一起学习 Eloquent 中最复杂也是最难理解的部分——模型间关系。...官方英文文档中叫 Relationships,个人认为翻译成 “模型间关系” 比现在的 “关联” 更好理解一点哈哈。...一对一关系 顾名思义,这描述的是两个模型之间一对一的关系。这种关系是不需要中间表的。...---- 这里最难的地方在于后面的两个 foreign_key 和 local_key 的设置,大家可以就此记住:在 User 类中,无论 hasOne 谁,第二个参数都是 `user_id`,第三个参数一般都是...其他关系 Eloquent 还提供 “远层一对多关联”、“多态关联” 和 “多态的多对多关联” 这另外三种用法,经过上面的学习,我们已经掌握了 Eloquent 模型间关系的基本概念和使用方法,剩下的几种不常用的方法就留到我们用到的时候再自己探索吧

    2.7K30

    3分钟短文:说说Laravel模型关联关系最单纯的“一对一”

    [img] 所以,laravel模型提供了关联关系,本文就来梳理梳理那些用法。 代码时间 我们不要PPT似的念稿子,罗列出所有的关系模型,那样不直观也不是高效学习的方式。...首先是数据库的准备,假设有如下两个表的字段对应关系: [pic] 使用命令行创建一个Profile模型,并同时创建迁移文件: php artisan make:model Profile --migration...文件, 用于生成对应的数据库 profiles 表。...; // 返回 hasOne 关联关系对象 大家在使用的时候,一定不要迷惑,要分清楚使用方法。...模型关联的最简单的“一对一”,我们从程序角度和数据库角度讲解了 如何在删除资源时的一致性删除。

    2K31

    3分钟短文:说说Laravel模型中还算常用的2个“关系”

    引言 上一章我们介绍了比较简单的laravel模型关联关系中的一对一,介绍了关联操作方法。...belongsTo 关系 正好像对于一个词语,找到对应的反义词,或者说有一个图片,找到其镜像图片这样的。 有作用力,就有反作用力。一对一关系模型中,A有一个B,则反过来,B属于一个A。...$this->belongsTo('App\User'); } } 也就是说,有一个profile是从属于user的,这与User模型的hasOne正好是对应关系。...类中我们声明了 user() 方法用于关系用户模型, 所以此处链式调用 user 属性,返回的是一个 App\User 对象实例,其包含 User 模型的所有属性, 因此 email 属性也相应返回数据库内的字段值...写在最后 本文不失简单地介绍了belongsTo和hasMany两个关联关系,这在代码中仅次于hasOne关系, 使用的频次比较高的。而效率也就是根据外键多查询一次SQL的消耗而已。

    2.1K31

    为什么 Laravel 这么优秀?

    因为我们已经完成了数据表中字段的定义、表与表的关系、以及最重要的一步:如何将数据及数据之间的关系写入数据库中,下面简单的来介绍下在 Laravel 是如何完成的。...{ return $this->hasOne(Teacher::class); } 一旦模型间的关系定义完成,我们就可以非常方便的通过 Laravel Eloquent 查询它们之间的数据关系...Laravel Route # 在 Laravel 中我们还可以非常方便的管理应用的路由;Laravel 的路由是集中式路由,所有的路由全部写在一两个文件中;Laravel 的 Route 给开发者暴露了一套简单的...::class); Laravel 会自动帮我们注册 5 条路由如下所示,包括用于新增操作的 POST 请求,用于删除的 DELETE 请求等: file Laravel 路由虽然是非常优秀的设计,...Laravel Container 支持自动帮你构造容器中不存在的对象,如果这构造这个对象时还依赖另外的对象,Laravel 会尝试递归的创建它,举个例子: class A { public function

    26710

    3分钟短文:Laravel模型一对一一对多关系真的乱吗?

    引言 laravel模型不但提供了可供数据库操作的增删改查,还附加了很多功能,最关键的要数模型的关联关系。本文说一说简单的一对一,和一对多关系。用代码说话,让大家更直观地理解。...$this->hasOne(PhoneNumber::class); }} 上面这个写法,默认是有一个模型 PhoneNumber 所对应的表,且表内有一个字段名 contacts_id 作为外键...,我们先查找到手机号,然后使用关联函数返回Contact模型: $contact = $phoneNumber->contact; laravel还有一个高级用法,关联插入新的条目。...,调用模型的create方法,传入一个数组,用于新建: $contact->phoneNumbers()->create(['number' => '123123123']); 有了一对一的铺垫,我们理解一对多就简单的多了...写在最后 本文通过常用的用户,通讯录,订单,手机号等模型数据,演示了laravel模型的一对一一对多 关联的使用方法。 Happy coding :-)

    2.1K30

    3分钟短文 | Laravel 检验关联模型是否存在的2个必知必会方法

    引言 接着我们的Laravel系列说下去。今天的主题是在程序内,用什么方法判断,模型的关联模型是否存在呢? 本文通过对比分析,教会大家如何正确地判断 exists,或判断 null。...学习时间 假设有一个模型 RepairItem,有下面的关联关系: public function option() { return $this->hasOne('RepairOption',...'repair_item_id'); } 如果更新RepairItem的时候,需要同步更新RepairOption数据。...如果更新的时候,关联模型有可能不存在。这个时候做 update 更新操作,会返回 None 对象没有 update 方法这样的错误。 所以逻辑上需要一个判断,先判断关联模型是否存在。...那么如何判断关联模型是否存在呢? 其实,在Laravel中,使用 $this->option 援引关联模型时,如果存在,则返回关联模型对象或集合,如果不存在则是 Null 对象。

    95830

    PHP-web框架Laravel-Eloquent ORM(三)

    四、查询构建器Laravel框架中的Eloquent ORM提供了方便的查询构建器,用于构建复杂的查询语句。下面是一些常用的查询构建器方法。...select方法select方法用于选择需要返回的字段,例如:$users = User::select('name', 'email')->get();上述代码中,只返回用户的姓名和邮箱字段。...总结通过上述文档和示例,我们可以看出Laravel框架中的Eloquent ORM提供了便捷的对象关系映射功能,可以大大简化开发者的数据库操作。...在使用Eloquent ORM进行开发时,需要注意以下几点:模型类名默认对应的表名是模型类名的复数形式,如User模型对应的表名是users,如果需要指定表名可以通过定义$table属性来实现。...关联关系的定义需要在对应的模型类中定义,例如一对一关联需要在hasOne和belongsTo方法中定义,一对多关联需要在hasMany和belongsTo方法中定义,多对多关联需要在belongsToMany

    1.5K41

    ORM 实例教程

    本文来自阮一峰老师的《ORM 实例教程》,如果你用来laravel类的框架,应该对orm有一定的熟悉了,本文是做个深入的理解学习。...一、概述 面向对象编程和关系型数据库,都是目前最流行的技术,但是它们的模型是不一样的。 面向对象编程把所有实体看成对象(object),关系型数据库则是采用实体之间的关系(relation)连接数据。...Invoice', from: 'CustomerId', to: 'CustomerId'}); } } 上面代码中,this.hasOne(name, option)的第一个参数是该关系的名称...7.4 多对多关系 通常来说,"多对多关系"需要有一张中间表,记录另外两张表之间的对应关系。...相应地,PlaylistTrack这个 Model 里面,要用两个this.belongsTo()方法,分别跟另外两个 Model 进行连接。

    1.3K20

    Laravel Eloquent 模型关联关系详解(上)

    比如在大型系统中,我们的用户表通常用于最基本信息的存储,如邮箱、用户名、密码等,然后像用户爱好、标签、个性签名、所在地等信息都存到另一张扩展表中,需要的时候才会去扩展表取数据,从而提高查询性能。...首先,我们在 User 模型类中通过 hasOne 方法定义其与 UserProfile 的一对一关联: public function profile() { return $this->hasOne...第二个参数是当前模型类所属表的外键,在本例中是 user_profiles 表的 user_id 字段,拼接规则和 hasOne 那里类似,只不过这里是基于第四个参数关联关系名称 $relation:...第四个参数 relatedPivotKey 是中间表中当前关联模型类的外键,拼接规则和 foreignPivotKey 一样,只不过作用于关联模型类,所以在本例中是 tags 表的 tag_id 字段。...最后一个参数 $relation 表示关联关系名称,用于设置查询结果中的关联属性,默认是关联方法名。

    10K40

    Gorm-模型关系定义和标签 (一)

    在Gorm中,除了定义模型字段和标签外,还可以通过定义模型关系来描述不同表之间的关联关系,以实现更加复杂的数据操作。...定义模型关系在Gorm中,可以使用下列标签来定义模型关系:BelongsTo: 定义一对一或一对多关系的“从属”模型。HasOne: 定义一对一关系的“拥有”模型。...在这种情况下,User模型将具有一个TeamID字段,用于存储其所属团队的ID。...最后,我们通过将User模型中的Team字段与Team模型的ID字段相关联,将两个模型关联起来。HasOneHasOne标签用于定义一对一关系的“拥有”模型。...接着,我们定义了一个Profile模型,并将其与User模型相关联。最后,我们通过将Profile模型中的User字段与User模型的ID字段相关联,将两个模型关联起来。

    64330

    One to One 的数据库模型设计与NHibernate配置

    在数据库模型设计中,最基本的实体关系有三种:一对一、一对多、多对多。关于一对多和多对多使用的情况较多,之前也有过一些讨论,现在来说明一下在数据库中一对一的模型设计。...1.主键关联 比如我们在做一个ER系统时,设计了一个Employee表保存员工的基本信息(主表),另外有一个EmployeePhoto表(外表),用于保存员工的证件照,员工和照片之间就是一对一的关系。...在主键关联的情况下,如果从主表中移除从表的引用,这个时候保存主表,是不会删除从表的,也不会删除这个一对一的关系的。...PropertyRef(r => r.Classroom); ApplyFilter("IS_DELETED = :DeleteFlag"); } } 这里两个表中只需要有一个表持有对方的主键作为外键即可...单向外键关联时,如果数据库允许CLASSROOM_ID为空,那么是可以打断Class和Classroom的关系的,而使得这两个对象独立存在,这一点是和主键关联所不一样的地方。

    49220

    3分钟短文:Laravel模型创建数据条目的2个语法糖

    引言 经过之前章节对于路由,控制器等知识做了很多的储备,接着我们开始与数据库交互,摆脱繁复且难以维护的SQL操作,laravel提供了MVC的M模型功能。...[img] 本期我们开始讲模型中,如何插入新条目,或者更新既有条目。...这样laravel在处理模型数据的时候,会默认更新此二字段。 然而,对于写入数据库的那些数据,并不是所有字段都会允许写入的。在模型内我们可以手动指定哪些字段可以写,哪些字段不可以写。...比如对于User模型,是控制用户权限资源的,所以非常重要。假如有一个字段 is_admin 用于指定是否 ”超级管理员“,如果在程序内不小心使用数组或者其他方式对其进行了写入,将会造成比较大的麻烦。...以及两个语法糖的使用细节。 Happy coding :-)

    1.9K00

    Laravel 服务提供者指南

    本教程还将演示如何在 Laravel 中创建一个自定义的服务提供者。另外,如果你需要在 Laravel 中成功使用服务容器,还需要注册它。那么,让我们开始吧。...Laravel 文档中描述如下: Laravel 服务容器是用于管理类的依赖和执行依赖注入的工具 - Laravel 文档 这样,当我们需要注入一个内置的组件或服务时,可以在构造函数或方法中使用类型提示功能注入...register 方法用于执行服务绑定处理。另外在 boot 方法中可以使用所有已绑定的服务。...在这个教程的最后一节我们将学习更多有关这两个方法的细节,但在这里我们会先了解些这两个方法的使用示例加深理解。 注册自定义服务提供者 前面我们创建了一个自定义的服务提供者。...Laravel 文档中对此有一个说明: 如果我们的依赖无需任何接口,则无需将类绑定到容器。容器此时不需要了解创建对象的具体细节,而可以通过反射功能实现自动注入。

    1.9K00

    orm2 中文文档 4.1 hasOne(多对一关系)

    译者:飞龙 来源:hasOne hasOne关联是一种多对一的关系,意思是你定义的模型可以有多个实例指向一个其它的实例(所属相同模型或不同模型)。...用法 Animal.hasOne(association_name [, association_model [, options ] ]); 描述 association_name是两个模型之间的关系名称...‘ association_model是要关联的另一个模型(如果没有定义,假设为同一个模型,大多数情况下这可能不是你想要的); options是一个对象,拥有一些和关联有关的,你可以调整的属性,比如自动获取...,再比如表(SQL中)或者集合(MongoDB中)的名称。...Animal.hasOne('owner', Person, { reverse: "pets" }); 之后,每个person实例都有有两个便利方法: getPets(callback) - 获取所有和这个人有关联的动物

    41310

    10 关联模型《ThinkPHP6 入门到电商实战》

    首先我们有一个 user 表如下: 接着给 student 表添加对应的 uid 列: 随后我们在model 文件夹下创建一个 User 的php 文件用于模型: 在 User...模型表中编写代码: <?...(StudentModel::class,'uid'); } } 在 student 方法中,hasOne 表示一对一关联,其中第一个参数 StudentModel::class 表示关联的表,...,例如此时我在副表中右如下数据: 此时 uid 的值是有两条重复的,那么我们此时修改对应的 user 模型中的方法: public function student(){ //return...uid 数据,因为之前在模型中已经进行了设置外键,那么访问后数据库成功新增数据: 此时成功操作后所返回的内容是对应的模型数组: 六、关联删除 关联删除可使删除主表数据时同时删除副表数据,

    83320
    领券