框架提供的关联关系,有很多种,其中对于一对一的关系, 有两个写法,一个是 belongsTo,一个是 hasOne,这俩到底啥区别,本文就来说一说。 ?...学习时间 从文档上讲,belongsTo 是 hasOne 的逆函数。...hasOne 方法,可以使用 user->phone 返回一个 Phone 模型对象,但是反过来不行, 你不能通过 Phone 获取 User,也就是 要达到这个目的,你需要在 Phone 模型中,...因为关联关系的第二个,第三个参数,根本没有填写。所以这样对比是不直观的。 hasOne 和 belongsTo 最大的不同,是哪一方持有关系的外键。...写在最后 本文通过几个实例介绍了数据库模型的一对一,一对多,以及反向关联关系, 大家记住一点,belongsTo 是根据当前表存储的外键,去主表内查找记录,而且是返回一个模型对象,或者null。
BelongsTo BelongsTo 关联是在 source model 上存在一对一关系的外键的关联。 一个简单的例子是 Player 通过 player 的外键作为 Team 的一部分。...在 Sequelize 1:1 关系中可以使用 HasOne 和 BelongsTo 进行设置,它们适用于不同的场景。...而 Player 作为 target Team.belongsTo(Player); //Or Team.hasOne(Player); HasOne 和 BelongsTo 将关联键插入到不同的模型中...HasOne 在 target 模型中插入关联键,而 BelongsTo 将关联键插入到 source 模型中。...即通过将外键 userId 设置为 NULL,完成表关系的切除。
关联关系 One To One 假设User模型关联了Phone模型,要定义这样一个关联,需要在User模型中定义一个phone方法,该方法返回一个hasOne方法定义的关联 null, string|null $secondKey = null, string|null $localKey = null ) Polymorphic Relations...likeable会根据该记录的类型返回帖子或者评论。...查询关系存在性 使用has方法可以基于关系的存在性返回结果 // 检索至少有一个评论的所有帖子......', ]); 更新 “Belongs To” 关系 更新belongsTo关系的时候,可以使用associate方法,该方法会设置子模型的外键 $account = App\Account::find(
hasOne 方法的完整签名是: public function hasOne($related, $foreignKey = null, $localKey = null) 其中,第一个参数是关联模型的类名...(2); $user = $profile->user; 打印 $user 用户信息如下: 同样,和 hasOne 方法一样,belongsTo 方法也是遵循了默认的约定规则,其完整方法签名如下:...public function belongsTo($related, $foreignKey = null, $ownerKey = null, $relation = null) 其中第一个参数是关联模型的类名...返回的是单个模型实例不一样,hasMany 返回的是模型类集合: Eloquent 底层约定 和 hasOne 方法一样,hasMany 方法底层也对如何建立关联关系做了约定,而且 hasMany...方法和 hasOne 方法的签名一样: public function hasMany($related, $foreignKey = null, $localKey = null) foreignKey
此时关系处理上主要的逻辑是调用Model的HasOne等表关系的方法,返回Relation的子类,然后通过Relation来处理进而返回数据,这么说可能有点绕,我们下面具体介绍下每个关系的实现,大家可能就理解了...先看HasOne,即OneToOne的关系,看代码 public function hasOne($related, $foreignKey = null) { $foreignKey = $foreignKey..., $foreignKey); } 我们看到当调用Model的hasOne方法后,返回是一个HasOne,即Relation,当我们调用Relation的方法时,是怎么处理的呢?...假设我们有个User,Phone,然后User和Phone的关系是HasOne,在User声明上就会有 class User extends Model { /** * Get the...以上就是我们分析的HasOne的实现,其他的关系都类似,此处不再重复,然后eager load的含义是指,当我们要加载多个数据的时候,我们尽可能用一条sql解决,而不是多条sql,具体来说如果我们有多个
这就是首先要介绍的 belongsTo 关系。...$this->belongsTo('App\User'); } } 也就是说,有一个profile是从属于user的,这与User模型的hasOne正好是对应关系。...类中我们声明了 user() 方法用于关系用户模型, 所以此处链式调用 user 属性,返回的是一个 App\User 对象实例,其包含 User 模型的所有属性, 因此 email 属性也相应返回数据库内的字段值...反过来,一个事件,一定属于某种状态,那就是belongsTo关系。...写在最后 本文不失简单地介绍了belongsTo和hasMany两个关联关系,这在代码中仅次于hasOne关系, 使用的频次比较高的。而效率也就是根据外键多查询一次SQL的消耗而已。
this.FirstName + ' ' + this.LastName; } } 上面代码告诉 Model,CustomerId是主键,FirstName和LastName是字符串,并且不得为null...// 返回所有记录 const customers = await Customer; 但是,通常不需要返回所有记录,而是使用limit(limit[, offset])方法指定返回记录的位置和数量(...Invoice', from: 'CustomerId', to: 'CustomerId'}); } } 上面代码中,this.hasOne(name, option)的第一个参数是该关系的名称...然后,Invoice内部使用this.belongsTo()方法,回应Customer.hasOne()方法。...一对多关系的处理,跟一对一关系很像,唯一的区别就是把this.hasOne()换成this.hasMany()方法。
三、模型关联Laravel框架中的Eloquent ORM提供了方便的模型关联功能,用于定义不同表之间的关联关系。下面是几个常用的模型关联类型。...一对一关联一对一关联表示一个模型与另一个模型有且只有一个对应关系。下面是一个示例:hasOne...其中,hasOne方法表示一个User模型拥有一个Phone模型,belongsTo方法表示一个Phone模型属于一个User模型。一对多关联一对多关联表示一个模型拥有多个相关模型。...其中,hasMany方法表示一个Post模型拥有多个Comment模型,belongsTo方法表示一个Comment模型属于一个Post模型。多对多关联多对多关联表示两个模型之间存在多对多的关联关系。
function getOrderEvaluate() { //Order_Evaluate表的order_id 与本数据表的id相等(这里是order表) return static::hasOne...$model = $this->findModel($id);//获取order数据对象 $orderEvaluateData = $model->orderEvaluate;//直接调用关联关系...,这里是一对一的关系,直接获取到Order_Evaluate表的数据 return $this->render('info', [ 'id' => $id, '...= null): ?> tag;?
一对一反向关联使用率很高 附表关联主表称为反向关联,又称为相对关联(tp官方手册这样叫) -- 分类表 CREATE TABLE `category` ( `id` int(10) unsigned NOT NULL...AUTO_INCREMENT COMMENT '主键id', `name` varchar(255) DEFAULT NULL COMMENT '分类名称', `sort` int(11) DEFAULT...NULL COMMENT '分类排序', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; INSERT...(Category::class, 'category_id', 'id'); } 3. belongsTo() 也支持额外的方法 同 hasOne() ---- public function category...() { /** * belongsTo('关联模型', '当前模型外键', '关联主键'); */ return $this->belongsTo(Category::class, 'category_id
2.2.1 正向关系绑定 public function profile() { return $this->hasOne(Profile::class); } 2.2.2 反向关系绑定 public...function user() { return $this->belongsTo(User::class); } 2.3 外键 ?...自定义外键: return $this->hasOne(Profile::class,'显示指定自定义外键'); 2.4 一对一测试 依赖注入Request $request,获取当前登录用户$request...profile = \App\Profile::find(1); // dd($profile->user); $user = $request->user(); // if (is_null...1:N hasMany(XXX:class) 反之:belongsTo(XXX:class) ? ? 3.1 面向对象方式绑定一对多的关系 ?
标签说明除了上述的BelongsTo、HasOne、HasMany和ManyToMany标签外,Gorm还提供了其他标签,用于进一步细化模型之间的关系。...not null: 指定字段非空。autoCreateTime: 自动创建记录的时间戳。autoUpdateTime: 自动更新记录的时间戳。...gorm:"uniqueIndex"` Age int `gorm:"index"` Gender string `gorm:"size:255;not null...例如,我们使用了uniqueIndex标签来指定Name字段为唯一索引字段,使用了index标签来指定Age字段为普通索引字段,使用了size标签来指定Gender字段的大小,使用了not null标签来指定
string `gorm:"uniqueIndex"` Age int `gorm:"index"` Gender string `gorm:"size:255;not null...[]User `gorm:"many2many:user_roles;"`}在上述代码中,我们定义了四个模型:User、Article、Comment和Category,以及一个Role模型,用于演示BelongsTo...、HasOne、HasMany和ManyToMany关系的使用。...其中,User模型与Article模型使用了HasMany关系,Article模型与Comment模型使用了HasMany关系,Article模型与Category模型使用了ManyToMany关系,User...模型与Role模型使用了ManyToMany关系。
,使用的方法是belongsTo return $this->belongsTo('Image', 'img_id', 'id'); //【需要创建Image模型类文件】 } 也可以在model...theme_product 多对多关系表中需要一个关联表连接两者关系 8-11 一对一关系解析 theme image 一对一关系 1.一对一关系的表示方法(有主从关系): hasOne...() belongsTo() 外键存储在其中一张表里,所以需要使用hasOne和belongsTo来区分。...有外键的表`belongsTo`无外键的表 无外键的表`hasOne`有外键的表 theme – (topic_img_id, head_img_id) – 表中有外键 (对应 image 表中的 id...主键) =》 theme topicImg belongsTo image image – 表中没有外键 =》 image hasOne theme 8-12 Theme 接口验证与重构 1.Theme
模型文件内创建关联方法: class Contact extends Model{ public function phoneNumber() { return $this->hasOne...如果这个外键不是 contacts_id,那就手动指定: return $this->hasOne(PhoneNumber::class, 'owner_id'); 使用 phone_numbers 表的...有了一对一关系,我们能不能从手机号码倒推,反向查询到通讯录条目呢?当然是可以的,这就是 一对一的逆函数 belongsTo。...class PhoneNumber extends Model{ public function contact() { return $this->belongsTo(Contact...::class); }} 与上方的调用关系相同,我们先查找到手机号,然后使用关联函数返回Contact模型: $contact = $phoneNumber->contact; laravel还有一个高级用法
select方法select方法用于选择需要返回的字段,例如:$users = User::select('name', 'email')->get();上述代码中,只返回用户的姓名和邮箱字段。...总结通过上述文档和示例,我们可以看出Laravel框架中的Eloquent ORM提供了便捷的对象关系映射功能,可以大大简化开发者的数据库操作。...它支持多种关联关系,包括一对一、一对多和多对多等,并且提供了方便的查询构建器,用于构建复杂的查询语句。...关联关系的定义需要在对应的模型类中定义,例如一对一关联需要在hasOne和belongsTo方法中定义,一对多关联需要在hasMany和belongsTo方法中定义,多对多关联需要在belongsToMany
Eloquent { protected $table = 'users'; public function hasOneAccount() { return $this->hasOne...---- 这里最难的地方在于后面的两个 foreign_key 和 local_key 的设置,大家可以就此记住:在 User 类中,无论 hasOne 谁,第二个参数都是 `user_id`,第三个参数一般都是...每次使用模型间关系的时候都写全参数,不要省略 相应的,如果使用 belongsTo() 关系,应该这么写: <?...{ protected $table = 'accounts'; public function belongsToUser() { return $this->belongsTo...相应的 belongsTo() 的用法跟上面一对一关系一样: <?
File root = new File(ROOT); File[] files = root.listFiles(); // 得到null 如果已知ROOT路径存在,root.exists()返回true
GetEnv返回NULL? FindClass返回NULL ?...有了这个JavaVM,我们再调用AttachCurrentThread 附加当前线程到虚拟机VM当中,并返回线程对应的JNIEnv,我们就能愉快的撸码了!...这么解释吧,只有先AttachCurrentThread到JavaVM,分配到了独立的JNIEnv之后,GetEnv第二个参数二级指针返回的env才有值。...= NULL); // 动态注册native函数 ......)->AttachCurrentThread(javaVM,&env,NULL) !
其中,routes存放各种路由,models配置各种数据库模型类,ref.js用来配置相关的数据模型关联关系,主要关系为:user和loginInfo是1:1、user和address是1:N、user.../role.js")); }; ref.js映射关系配置类: /** * 模型关联类 */ var { sequelize } = require("...../role"); //建立模型之间关联关系 User.hasOne(LoginInfo); LoginInfo.belongsTo(User); User.hasMany(Address, {...targetKey: 'id', as: "Addresses" //别名,目标模型会混入到源模型后会使用该名称,存在getAddresses、setAddresses等方法 }); Address.belongsTo...,使数据模型和数据库同步: //加载主外键关系及创建数据库 require('.
领取专属 10元无门槛券
手把手带您无忧上云