thinkphp模型hasOne、hasMany、belongsTo详解

在ThinkPHP框架中,hasOnehasManybelongsTo是用于定义模型间一对多(1:n)、一对一(1:1)和多对一(n:1)关联关系的方法。以下是一些简单的示例来解释这些关系:

1. hasOne (一对一关系)

假设我们有AuthorProfile两个模型,一个作者(Author)有一个个人资料(Profile):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Author 模型
namespace app\common\model;
use think\Model;
 
class Author extends Model
{
    public function profile()
    {
        return $this->hasOne('Profile', 'author_id', 'id');
    }
}
 
// Profile 模型
namespace app\common\model;
use think\Model;
 
class Profile extends Model
{
    // Profile 模型通常不需要定义反向关联,因为Author已经定义了hasOne
}

在这个例子中:

  • hasOne的第一个参数 'Profile' 是关联模型的类名。
  • 第二个参数 'author_id' 是Profile模型中的外键字段,它引用Author模型的主键。
  • 第三个参数 'id' 是Author模型的主键字段。

2. hasMany (一对多关系)

假设我们有AuthorBook两个模型,一个作者(Author)可以写很多书(Book):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Author 模型
namespace app\common\model;
use think\Model;
 
class Author extends Model
{
    public function books()
    {
        return $this->hasMany('Book', 'author_id', 'id');
    }
}
 
// Book 模型
namespace app\common\model;
use think\Model;
 
class Book extends Model
{
    // 不需要在Book模型中定义反向关联,因为Author已经定义了hasMany
}

  在这个例子中:

  • hasMany的第一个参数 'Book' 是关联模型的类名。
  • 第二个参数 'author_id' 是Book模型中的外键字段,它引用Author模型的主键。
  • 第三个参数 'id' 是Author模型的主键字段。

3. belongsTo (多对一关系)

假设我们有BookAuthor两个模型,一本书(Book)属于一个作者(Author):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Book 模型
namespace app\common\model;
use think\Model;
 
class Book extends Model
{
    public function author()
    {
        return $this->belongsTo('Author', 'author_id', 'id');
    }
}
 
// Author 模型
namespace app\common\model;
use think\Model;
 
class Author extends Model
{
    // 可选:如果需要在Author模型中访问Book,可以定义反向关联
    public function books()
    {
        return $this->hasMany('Book', 'author_id', 'id');
    }
}

  在这个例子中:

  • belongsTo的第一个参数 'Author' 是关联模型的类名。
  • 第二个参数 'author_id' 是Book模型中的外键字段,它引用Author模型的主键。
  • 第三个参数 'id' 是Author模型的主键字段。

在实际应用中,你可以根据业务逻辑来定义这些关联,以便更方便地处理数据。例如,当你获取一个Author实例时,可以通过$author->profile来获取作者的个人资料,或者通过$author->books获取该作者写的书。同样,获取一个Book实例时,可以使用$book->author来获取书籍的作者。

 

posted @   飞龙在生  阅读(1675)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示