所有的orm框架都会在代码层描述数据库结构,比如ef(entity framework)的实体类和edmx文件,java的注解实体类等,laravel中是通过实体类来描述数据库结构(或者说表之间的关联关系)。
Eloquent 中表的关联关系以方法的方式描述。本文我们先看如何通过定义方法的方式来描述表之间的关联关系,然后再讲解关联关系的使用方法。
在描述一对一的关系之前需要理解一个【拥有】和【属于】的关系,这个关系是eloquent描述一切表关联关系的基础,这个道理其实很简单,但是很容易被忽略。
我们一般将外键放到被拥有的一方,比如user和phone两个表,假如一个人只有一个电话的话,我们一般会通过在phone表中创建user_id来关联二者关系,即:user拥有phone,phone属于user。
理解拥有和属于的概念之后我们可以很容易描述二者关系。
在user类中创建phone()方法, 此方法返回一个HasOne对象。hasOne方法理解重点为
在phone类中可以创建belongsTo方法,此方法返回一个BelongsTo对象。此方法理解终点为:
注意
如同 Eloquent 模型本身,关联也可以作为强大的 查询构造器 使用,提供了强大的链式调用和查询功能。定义关联模型之后,可以使用动态属性访问关联对象。
$phone = User::find(1)->phone;
注意
使用ide-helper可以自动生成关联关系的字段名的phpDocs,避免phostorm不识别字段名,导致没有代码自动完成和黄色波浪线以及警告。
本节实际只是介绍了两个方法的使用,hasOne和belongsTo。这两个方法非常简单,但是要做到完全理解,还是有不少细节需要理解到位。看起来简单,实际要做到用起来得心应手还是需要下一番功夫。
热门评论