php的关联文件并列显示,一对多关联

hasOne 和 belongsTo 都是一对一关系,区别:

在主表(不包含外键)的模型中建立关联关系,用 hasOne

在从表(包含外键)模型中建立关联关系,用 belongsTo

# **一对多关联**

>[info] ## hasMany('**关联模型**','关联模型**外键**','当前模型**主键**');

例子:

**article:**

| id | tittle | content |

| --- | --- |--- |

| 1 | 这是文章标题 | 这是文章内容 |

**comment:**

| id | art_id | content |

| --- | --- |--- |

| 1 | 1 | 文章评论1 |

| 2 | 1 | 文章评论2 |

| 3 | 1 | 文章评论3 |

~~~

namespace app\model;

use think\Model;

class Article extends Model

{

public function comments()

{

return $this->hasMany(Comment::class,'art_id');

}

}

~~~

### **关联查询**

我们可以通过下面的方式获取关联数据

~~~

$article = Article::find(1);

// 获取文章的所有评论

dump($article->comments);

// 也可以进行条件搜索

dump($article->comments()->where('status',1)->select());

~~~

### **根据关联条件查询**

可以根据关联条件来查询当前模型对象数据,例如:

~~~

// 查询评论超过3个的文章

$list = Article::has('comments','>',3)->select();

// 查询评论状态正常的文章

$list = Article::hasWhere('comments',['status'=>1])->select();

~~~

如果需要更复杂的关联条件查询,可以使用

~~~

$where = Comment::where('status',1)->where('content', 'like', '%think%');

$list = Article::hasWhere('comments', $where)->select();

~~~

### **关联新增**

~~~

$article = Article::find(1);

// 增加一个关联数据

$article->comments()->save(['content'=>'test']);

// 批量增加关联数据

$article->comments()->saveAll([

['content'=>'thinkphp'],

['content'=>'onethink'],

]);

~~~

### **关联删除**

在删除文章的同时删除下面的评论

~~~

$article = Article::with('comments')->find(1);

$article->together(['comments'])->delete();

~~~

# **定义相对的关联**

>[info]## belongsTo('关联模型','外键', '关联主键');

~~~

name app\admin\model;

use think\Model;

class Comment extends Model

{

public function article()

{

return $this->belongsTo(Article::class);

}

}

~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值