前言
有的时候,因为model对应的数据表有一些数据是从另外的表得来的。这种情况,我们就需要定义模型关联关系。
常用的模型关联关系分为一对一、一对多、多对多。
模型包含查询、修改等操作,混合一起描述可能会比较乱,所以我将分开讲述。
特别注意
一般来说,model类名会自动关联同名的数据表,如果想要修改这个对应关系,可以这么做:
protected $table = '表名';
一对一查询
一对一有hasOne
以及belongsTo
两种,那么它们对应的使用场景是怎样的呢?
先来看看官方文档:
hasOne('关联模型','外键','主键');
belongsTo('关联模型','外键','关联主键');
这里面,我们需要仔细看第三个参数。
hasOne是主键,意味着本模型对应的表是主表,有一个从表通过外键关联本表(模型)的主键。
而belongsTo是关联主键,意味着本模型对应的表是从表,本表(模型)通过本表(模型)的外键关联主表(模型)的主键。
总结:外键在本表,使用belongsTo;反之,使用hasOne。
例子
商品表有外键img_id,关联着图片表的id,
这时候在商品模型
应该使用belongsTo关联图片模型
,因为外键在本表;
而如果图片模型
想关联商品模型
,应该使用hasOne,因为外键在商品表。
hasOne
hasOne('关联模型','外键','主键');
我们用代码实现一下上面的例子
class Img
{
// 定义关联方法,名字随意
public function product()
{
$this->hasOne('Product', 'img_id', 'id');
}
}
belongsTo
belongsTo('关联模型','外键','关联主键');
class Product
{
// 定义关联方法,名字随意
public function img()
{
$this-